Ich habe einen Java-Code entwickelt, der die folgende cURL mithilfe von URL und HttpUrlConnection in Java-Code konvertiert. Die Locke ist:
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"}}'
Ich habe diesen Code geschrieben, aber er gibt immer eine schlechte Anfrage für den HTTP-Code 400 aus. Ich konnte nicht finden, was fehlt.
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());
}
Antworten:
Ihr JSON ist nicht korrekt. Anstatt
schreiben
Daher sollte JSONObject.toString () für das äußere Objekt nur einmal aufgerufen werden.
Eine andere Sache (höchstwahrscheinlich nicht Ihr Problem, aber ich möchte es erwähnen):
Um sicherzugehen, dass keine Codierungsprobleme auftreten, sollten Sie die Codierung angeben, wenn dies nicht der Fall ist
UTF-8
:quelle
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
quelle
Sie können diesen Code für die Verbindung und Anforderung über http und json verwenden
quelle
Die richtige Antwort ist gut, aber
nicht für mich arbeiten , stattdessen verwenden :
quelle
Ich hatte ein ähnliches Problem, ich bekam 400, Bad Request nur mit dem PUT, wo als POST-Anfrage vollkommen in Ordnung war.
Der folgende Code funktionierte gut für POST, gab aber eine schlechte Anfrage für PUT:
Nachdem die folgenden Änderungen vorgenommen wurden, funktionierten sie sowohl für POST als auch für PUT einwandfrei
quelle