2016-10-19 2 views
0

Я пытаюсь отправить запрос POST на мой сервер (используя Apache HTTPClient 4.5) с установленным списком параметров JSON. Я следил за некоторыми вопросами, но у меня проблемы.Как отправить POST с параметрами JSON с помощью Apache HTTPClient 4.5. Получение 415 неподдерживаемых носителей типа

Когда я использую консоль javascript для отправки запроса, он работает! Как это:

//Using JS console, I send a POST request and it works. 
$.post('/createConfigData', { 
    "tailSign": "A7ALE", 
    "active": "Y" 
}); 
//Get back 201 

Когда я использую Apache HTTPClient 4.5, чтобы попытаться сделать то же самое, что и выше, я вернусь 415 неподдерживаемый тип носителя:

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

данные, которые я есть от запрос есть:

  • Заголовки запросов:
    • Ведущий: "mysite.com"
    • User-Agent: «Mozilla/5.0 (X11; Ubuntu; Linux x86_64; с.в.: 25.0) Gecko/20100101 Firefox/25.0"
    • Accept: "*/*"
    • Accept-Language: "EN-US, ан; д = 0,5"
    • Accept-Encoding: "GZIP, выкачать"
    • Content-Type: "application/x-www-form-urlencoded; кодировка = UTF-8"
    • Referer: "mysite.com/index.html"
    • Content-Length: "288"
    • Cookie: "JSESSIONID = ..."
    • Proxy-Authorization: "Основные ..."
    • соединения: "держать-жив"
    • Pragma: "нет кэша"
    • Cache-Control: "нет кэша"
  • Response Headers:
    • Возраст: "0"
    • соединения: "Keep-Alive"
    • Content-Type: "приложения/JSON, кодировка = UTF-8"
    • Дата: "Wed, 19 Oct 2016 17:57:34 GMT"
    • Сервер: "Apache-Coyote/1.1"
    • Transfer-Encoding: "фрагментированный"

Я немного запутался, где установить тип контента, то ли объект или HttpPost

=======================

Больше тестовые

Настройка httpost Тип содержание JSON дает мне 400

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

Установка httpost Тип контента х-WWW-форм-urlencoded дает мне 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); 

Я также попытался добавить следующую строку:

httppost.addHeader("Accept", "*/*"); 

==================

РЕШЕНИЕ

Использование wireshark Мне удалось выяснить, что появилось сообщение об ошибке, которое сопровождает 400-й запрос! Это был только мой JSON, это было неправильно.

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

Я выкладываю XML с помощью HttpClient и не мог найти способ, так как я перешел на Весна в 'RestTemplate' – amphibient

+1

ли вы пытаетесь проверить заголовки запросов, которые HttpClient посылает? (вы можете использовать Wireshark для этого) –

ответ

2

Вы получаете 415 неподдерживаемый тип носителя, поскольку ваш перезаписал типа содержимого заголовок применение/х-WWW-форм-urlencoded; charset = UTF-8. Просто измените его:

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

Когда я отправляю его с использованием типа содержимого 'x-www-form-urlencoded', я получаю' 415'. Когда я отправляю с использованием типа содержимого 'json', я получаю' 400'. Я думаю, что, возможно, где-то это не ** принимается json ** как тип. Я попытался добавить 'httppost.addHeader (« Accept »,« */* »);' но я все еще получил '400'. – Kayvar

Смежные вопросы