Я пытаюсь отправить запрос 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}}
Я выкладываю XML с помощью HttpClient и не мог найти способ, так как я перешел на Весна в 'RestTemplate' – amphibient
ли вы пытаетесь проверить заголовки запросов, которые HttpClient посылает? (вы можете использовать Wireshark для этого) –