尝试将python代码转换为java代码以获得httppost请求,但始终得到400响应。尝试在我的电脑中使用与本地Web服务相同的代码,则不存在任何问题。请参阅Python代码:得到400响应httpurlconnection发送post请求
post_data = {'monitoredObjects':'VZLab-IViewG10-2','monitoredObjectType':'Probe'}
print(post_data)
postfields = urlencode(post_data)
response = BytesIO()
b = pycurl.Curl()
b.setopt(b.URL, base+"capture")
b.setopt(b.HTTPHEADER, ['username:'+username,'securitytoken:'+securitytoken])
b.setopt(b.SSL_VERIFYPEER, 0)
b.setopt(a.SSL_VERIFYHOST, 0)
b.setopt(b.WRITEDATA, response)
b.setopt(b.POST, 1)
b.setopt(b.POSTFIELDS, postfields)
b.perform()
b.close()
我的Java代码:
public void method(){
String securityToken = "12134";
HashMap<String, String> header = new HashMap<String, String>();
header.put("username", username);
header.put("password", password);
header.put("securitytoken", securityToken);
String api = "capture";
JsonObject parameters = new JsonObject();
parameters.addProperty("monitoredObjects", System.getProperty("monitoredObjects"));
parameters.addProperty("monitoredObjectType", System.getProperty("monitoredObjectType"));
String captureResult = executePost(baseUrl, api, header, parameters.toString(), "POST");
String captureid = Xml.getXPathValue(result, "//startCapture/isa:captureId/text()");
}
public static String executePost(String baseUrl, String api, HashMap header, String urlParameters, String httpMethod) {
HttpURLConnection connection = null;
try {
// Create connection
URL url = new URL(baseUrl + api);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(httpMethod);
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Content-Language", "en-US");
connection.setRequestProperty("username", (String) header.get("username"));
connection.setRequestProperty("securitytoken", (String) header.get("securitytoken"));
/*
* String userPassword = username + ":" + password; String encoding = new
* sun.misc.BASE64Encoder().encode(userPassword.getBytes()); connection.setRequestProperty("Authorization", "Basic " +
* encoding);
*/
// connection.setRequestProperty("Accept-Encoding", "gzip");
connection.setUseCaches(false);
connection.setDoOutput(true);
// Send request
if (urlParameters != null) {
String encodedString = URLEncoder.encode(urlParameters);
OutputStream wr = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(wr, "UTF-8"));
writer.write(encodedString);
writer.flush();
writer.close();
wr.close();
// wr.write(urlParameters.getBytes("UTF-8"));
// wr.close();
}
int responseCode = connection.getResponseCode();
logger.info("\nSending 'POST' request to URL : " + url);
logger.info("Post headers : " + header);
logger.info("Post parameters : " + urlParameters);
logger.info("Response Code : " + responseCode);
// Get Response
if (responseCode == 200) {
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
StringBuilder response = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
response.append(line);
response.append('\r');
}
rd.close();
logger.info("*** BEGIN ***");
logger.info(response.toString());
logger.info("*** END ***");
return response.toString();
}
return null;
} catch (Exception e) {
logger.error(e.getMessage());
return null;
} finally {
if (connection != null) {
connection.disconnect();
}
}
}
400 HTTP响应是关于错误的请求,因此您的请求结构中可能有错误,那么请您提供更多信息,例如“baseUrl”的值是什么?如果你不能提供这些信息,你至少可以展示它的结构。 –