2016-10-19 2 views
0

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

gibt, gibt mir 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}} 
+0

Ich habe versucht, XML über Httpclient zu schreiben und nicht einen Weg finden könnte, damit ich zu Spring geschaltet 'RestTemplate' – amphibient

+1

Haben Sie versucht, die Anfrage-Header zu inspizieren, die Httpclient sendet? (Sie können Wireshark dafür verwenden) –

Antwort

2

Sie erhalten 415 nicht unterstützten Medientyp seit Ihrem hat überschrieben Content-Type-Header zu application/x-www-form-urlencoded; charset = UTF-8. ändern Sie es einfach an:

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); 
+0

Wenn ich es mit dem Inhaltstyp "x-www-form-urlencoded" sende, bekomme ich '415'. Wenn ich den 'json'-Inhaltstyp sende, bekomme ich' 400'. Ich glaube, vielleicht akzeptiert es JSON ** nicht als Typ. Ich habe versucht, 'httppost.addHeader (" Accept "," */* ") hinzuzufügen;' aber ich habe immer noch '400'. – Kayvar

Verwandte Themen