Desarrollé un código Java que convierte el siguiente cURL en código Java usando URL y HttpUrlConnection. el rizo es:
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"}}'
He escrito este código pero siempre da el código HTTP 400 como solicitud incorrecta. No pude encontrar lo que falta.
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());
}
Respuestas:
Tu JSON no es correcto. En vez de
escribir
Entonces, JSONObject.toString () debe llamarse solo una vez para el objeto externo.
Otra cosa (probablemente no sea su problema, pero me gustaría mencionarlo):
Para asegurarse de no tener problemas de codificación, debe especificar la codificación, si no es así
UTF-8
:fuente
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
fuente
Puede usar este código para conectarse y solicitar usando http y json
fuente
la respuesta correcta es buena, pero
no funciona para mí , en lugar de eso, usa :
fuente
Tuve un problema similar, obtenía 400, Solicitud incorrecta solo con el PUT, mientras que la solicitud POST estaba perfectamente bien.
El siguiente código funcionó bien para POST pero estaba dando una solicitud MALA para PUT:
Después de realizar los cambios a continuación, funcionó bien tanto para POST como para PUT
fuente