#java #apache-httpclient-4.x
#java #apache-httpclient-4.x
Вопрос:
Я использую http-клиент apache для выполнения вызовов Get и Post к одной и той же конечной точке. Get возвращает 200 нормально, но Post возвращает 404 не найдено. Есть идеи? Моя настройка следующая:
HttpClient client = HttpClients.createDefault();
String key = "foo"
HttpGet httpGet = new HttpGet("https://url");
HttpResponse response1 = client.execute(httpGet);
System.out.println(response1.getStatusLine());
HttpEntity entity1 = response1.getEntity();
EntityUtils.consume(entity1);
// Returns 200 OK
String bundle = "{"foo":"bar"}";
HttpPost httpPost = new HttpPost("https://url");
StringEntity requestEntity = new StringEntity(
bundle,
"application/json",
"UTF-8");
httpPost.setEntity(requestEntity);
HttpResponse response2 = client.execute(httpPost);
System.out.println(response2.getStatusLine());
HttpEntity entity2 = response2.getEntity();
EntityUtils.consume(entity2);
// Returns 404 Not Found
Комментарии:
1. Можете ли вы создать post с помощью такого инструмента, как Postman?
2. Да, я могу создать post с помощью Postman.
3. Вы провели параллельное сравнение полезной нагрузки, отправленной Postman, с тот, который отправляется вашим кодом, чтобы посмотреть, каковы различия, и можете ли вы заметить что-нибудь очевидное?
4. Я не думаю, что это связано с телом запроса, я получаю 404, даже если я установил для тела значение «{}».
5. Весь HTTP-запрос — строка запроса, заголовки и тело.
Ответ №1:
Убедитесь, что один и тот же URL вашего сервера принимает оба POST
и GET
, возможно, это потому, что конечная точка сервера обрабатывает POST
и GET
как разные маршруты и принимает только GET
, возвращаясь 404
к вашему POST
запросу. Так что это проблема не вашего http-клиента, а скорее сервера.