HttpClient Get возвращает 200, но Post возвращает 404

#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-клиента, а скорее сервера.