#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.