Java HttpClient возвращает «501 метод не реализован» и «ОТПРАВИТЬ в / не поддерживается»

#java #httpclient

#java #httpclient

Вопрос:

Я использую HttpClient для отправки формы на веб-страницу, и когда я смотрю на заголовок HTTP, который отправляет браузер, он определенно отправляет запрос POST туда.

Но когда я пытаюсь сделать то же самое с HttpClient , он возвращает страницу ошибки с сообщением в теме.

 HttpPost httpost = (HttpPost) prepareRequest(new HttpPost(targetURL));
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = httpClient.execute(httpost);
HttpEntity entity = response.getEntity();
content = EntityUtils.toString(entity);
EntityUtils.consume(entity);
  

Комментарии:

1. Это может зависеть от того, как настроен веб-сайт, на который вы пытаетесь опубликовать. Возможно, они проверяют заголовки user-agent и запрещают неизвестные.

2. httpost.AddHeader(«Content-type», «application/x-www-form-urlencoded»); решена проблема

3. Это связано с тем, что HttpClient включает кодировку, используемую для кодирования объекта в заголовке типа содержимого: ‘application/x-www-form-urlencoded; кодировка=UTF-8’, которую некоторые серверные скрипты не могут корректно обработать

Ответ №1:

501 также может означать, что ваш тип контента неправильно установлен для некоторых веб-серверов.

Если вы не хотите иметь дело с этим низкоуровневым API, это был бы код, необходимый в Resty для публикации, закодированной в x-www-форме-urlencoded.

 Resty r = new Resty();
String result = r.text(targetUrl, form(nvps)).toString();
  

Отказ от ответственности: Я автор Resty.