Я разработал Java-код, который преобразует следующий cURL в Java-код с использованием URL-адреса и HttpUrlConnection. завиток:
curl -i 'http://url.com' -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d '{"auth": { "passwordCredentials": {"username": "adm", "password": "pwd"},"tenantName":"adm"}}'
Я написал этот код, но он всегда дает неверный запрос HTTP code 400. Я не мог найти то, что пропало.
String url="http://url.com";
URL object=new URL(url);
HttpURLConnection con = (HttpURLConnection) object.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestMethod("POST");
JSONObject cred = new JSONObject();
JSONObject auth = new JSONObject();
JSONObject parent = new JSONObject();
cred.put("username","adm");
cred.put("password", "pwd");
auth.put("tenantName", "adm");
auth.put("passwordCredentials", cred.toString());
parent.put("auth", auth.toString());
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(parent.toString());
wr.flush();
//display what returns the POST request
StringBuilder sb = new StringBuilder();
int HttpResult = con.getResponseCode();
if (HttpResult == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(
new InputStreamReader(con.getInputStream(), "utf-8"));
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
System.out.println("" + sb.toString());
} else {
System.out.println(con.getResponseMessage());
}
Ответы:
Ваш JSON неверен. Вместо того
записывать
Итак, JSONObject.toString () следует вызывать только один раз для внешнего объекта.
Другое дело (скорее всего, не ваша проблема, но я бы хотел об этом упомянуть):
Чтобы избежать проблем с кодировкой, следует указать кодировку, если это не так
UTF-8
:источник
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
источник
Вы можете использовать этот код для подключения и запроса с использованием http и json
источник
правильный ответ - это хорошо, но
у меня не работает , вместо него используйте :
источник
У меня была аналогичная проблема, я получал 400, плохой запрос только с PUT, тогда как запрос POST был совершенно нормальным.
Код ниже работал нормально для POST, но давал BAD Request for PUT:
После внесения следующих изменений нормально работали как POST, так и PUT
источник