Попробуйте преобразовать код python в java-код для запроса httppost, но всегда получите ответ 400. попробуйте один и тот же код с некоторыми локальными веб-службами на моем компьютере, нет никаких проблем. Пожалуйста, смотрите код Python:получить 400 ответ httpurlconnection отправляет запрос на отправку
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();
}
}
}
Ответ на HTTP-запрос 400 о некорректном запросе, поэтому у вас может быть ошибка в структуре запроса, тогда вы могли бы добавить дополнительную информацию, например, какова ценность «baseUrl»? Если вы не можете поместить эту информацию, вы можете показать ее структуру, по крайней мере, пожалуйста. –