Ich versuche, eine POST-Anfrage an meinen Server (mit Apache HTTPClient 4.5) mit einer festgelegten Liste von JSON-Parameter zu senden. Ich habe einige SO-Fragen befolgt, stolpere aber über Probleme.So senden Sie einen POST mit JSON-Parametern mithilfe von Apache HTTPClient 4.5. Getting 415 nicht unterstützten Medientyp
Wenn ich eine Javascript-Konsole verwende, um die Anfrage zu senden, funktioniert es! Wie folgt aus:
//Using JS console, I send a POST request and it works.
$.post('/createConfigData', {
"tailSign": "A7ALE",
"active": "Y"
});
//Get back 201
Wenn ich Apache Httpclient 4.5, um zu versuchen, die gleiche Sache, wie oben zu tun, bekomme ich zurück 415 nicht unterstützten Medientyp:
HttpPost httppost = new HttpPost('/createConfigData');
String jsondata = "{\"tailSign\": \"A7ALE\",\"active\": \"Y\"}";
StringEntity jsonparam = new StringEntity(jsondata);
jsonparam.setContentType("application/json;charset=utf-8");
jsonparam.setChunked(true);
httppost.addHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
httppost.setEntity(jsonparam);
httpresponse = httpclient.execute(target, httppost);
Die Daten Ich habe von der Arbeits Anfrage ist:
-
Headers
- Anfrage:
- Host: "mysite.com"
- User-Agent: „Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 25,0) Gecko/20100101 Firefox/25,0"
- akzeptieren:
"*/*"
- Accept-Language: "en-US, en; q = 0.5"
- Accept-Encoding: "gzip, deflate"
- Inhaltstyp: "application/x-www-form-urlencoded; charset = UTF-8"
- Referer: "mysite.com/index.html"
- Content-Length: "288"
- Cookie: "JSESSIONID = ..."
- Proxy-Authorization: "Basic ..."
- Anschluss: "keep-alive"
- Pragma: "no-cache"
- Cache-Control: "no-cache"
- Antwort-Header:
- Alter: "0"
- Anschluss: "Keep-Alive"
- Content-Type: "application/json; charset = UTF-8"
- Datum: "Mi, 19 Okt 2016 17:57:34 GMT"
- Server: "Apache-Coyote/1.1"
- Transfer-Encoding: "gestückelt"
Ich bin ein wenig verwirrt darüber, wo Sie den Inhaltstyp festlegen, ob es die Einheit oder die Httppost
sein=======================
Weitere Testfälle
Rahmen des httpost Inhaltstyp json mich
HttpPost httppost = new HttpPost('/createConfigData');
String jsondata = "{\"tailSign\": \"A7ALE\",\"active\": \"Y\"}";
StringEntity jsonparam = new StringEntity(jsondata);
jsonparam.setChunked(true);
httppost.addHeader("content-type", "application/json;charset=UTF-8");
httppost.setEntity(jsonparam);
httpresponse = httpclient.execute(target, httppost);
Einstellung des httpost Inhaltstyp x-www-form-urlencoded400
415
HttpPost httppost = new HttpPost('/createConfigData');
String jsondata = "{\"tailSign\": \"A7ALE\",\"active\": \"Y\"}";
StringEntity jsonparam = new StringEntity(jsondata);
jsonparam.setChunked(true);
httppost.addHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
httppost.setEntity(jsonparam);
httpresponse = httpclient.execute(target, httppost);
Ich habe versucht, auch das Hinzufügen dieser Zeile:
httppost.addHeader("Accept", "*/*");
==================
SOLUTION
Verwendung wireshark Ich konnte herausfinden, dass es eine Fehlermeldung gab, die mit der 400 schlechten Anfrage einhergeht! Es war nur mein JSON war nicht korrekt.
HTTP/1.1 400 Bad Request
Server: Apache-Coyote/1.1
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 19 Oct 2016 21:33:25 GMT
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
{"code":400,"message":"Field ConfigName is Null, Invalid Value for Seat Count, Missing counts for DSU, ICMT, SVDU, TPMU, Login user details not found, Please enter valid lruData","fleetData":{"airlineData":null,"dimAircraftJson":null,"configData":null}}
Ich habe versucht, XML über Httpclient zu schreiben und nicht einen Weg finden könnte, damit ich zu Spring geschaltet 'RestTemplate' – amphibient
Haben Sie versucht, die Anfrage-Header zu inspizieren, die Httpclient sendet? (Sie können Wireshark dafür verwenden) –