J'ai développé un code java qui convertit le cURL suivant en code java en utilisant URL et HttpUrlConnection. la boucle est:
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"}}'
J'ai écrit ce code mais il donne toujours une mauvaise requête au code HTTP 400. Je n'ai pas pu trouver ce qui manque.
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());
}
Réponses:
Votre JSON n'est pas correct. Au lieu de
écrire
Ainsi, le JSONObject.toString () ne doit être appelé qu'une seule fois pour l'objet externe.
Autre chose (probablement pas votre problème, mais j'aimerais le mentionner):
Pour être sûr de ne pas rencontrer de problèmes d'encodage, vous devez spécifier l'encodage, si ce n'est pas le cas
UTF-8
:la source
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
la source
Vous pouvez utiliser ce code pour vous connecter et demander à l'aide de http et json
la source
la bonne réponse est bonne, mais
ne fonctionne pas pour moi , au lieu de cela, utilisez :
la source
J'ai eu un problème similaire, j'obtenais 400, Bad Request uniquement avec le PUT, alors que la demande POST était parfaitement bien.
Le code ci-dessous fonctionnait bien pour POST mais donnait une mauvaise demande de PUT:
Après avoir apporté les modifications ci-dessous, cela a bien fonctionné pour POST et PUT
la source