HTTPClient - HTTP GET не работает с якорем # в URL перенаправления - PullRequest
0 голосов
/ 24 октября 2011

Это немного странно. Я использую HTTPClient 4.1.2, и кажется, что всякий раз, когда он находит URL-адрес с чем-то вроде «#», он получает полный символ # в URL.

Например, при попытке получить URL http://stks.co/eWt будет перенаправлен на URL http://news.ichinastock.com/2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/#.Tpw-xG61XjU.twitter. Теперь этот URL активен, но проблема в том, что HTTPClient отправляет запрос на получение с URI, установленным в URI: /2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/#.Tpw-xG61XjU.twitter, что заставляет сервер отправить обратно страницу 404, не найденную.

Глядя на GET, отправляемый IE, Firefox и cURL, все они удаляют # ... с конца URI, поэтому, например, URI запроса CURL GET установлен как URI: /2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/ - все #... был удален. Это для точно такого же URL-адреса записи http://stks.co/eWt.

В качестве теста, отправка этого необработанного URL-адреса в HTTPClient (т.е. HttpGet httpget = new HttpGet("http://news.ichinastock.com/2011/10/jack-ma-alibaba-has-prepared-20-billion-to-acquire-yahoo/#.Tpw-xG61XjU.twitter");) дает тот же результат 404 не найден.

Таким образом, вопрос в том, есть ли какие-либо настройки в HTTPClient, которые можно установить так, чтобы такие вещи, как конечный # ..., можно было автоматически удалять из URL. Или как мне вручную удалить это из URL-адресов (помните, что мне нужно будет также захватить все URL-адреса перенаправления)?

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Похоже, их веб-сервер сломан.Спецификация URI говорит, что знак числа (#) завершает часть пути URI.Если веб-сервер рассматривает что-либо после # части пути, он не следует спецификации URI.

Компонент пути содержит данные, обычно организованные в иерархической форме, которые вместе с данными внеиерархический компонент запроса, служит для идентификации ресурса в рамках схемы URI и полномочий по присвоению имен (если таковые имеются).Путь завершается первым знаком вопроса («?») Или знаком числа («#»), либо концом URI. "- RFC3986

Я протестировал несколько популярных веб-серверов, и все они правильно анализируют эти URI, игнорируя часть после знака числа.

Хотя у меня нет хороших предложений для обхода проблемы. Но, по крайней мере, теперь вы знаете, ктовинить.

0 голосов
/ 24 октября 2011

Примечание: Все строки, следующие после хэша (и хэша), не будут отправлены на сервер.Хеш в URL предназначен для браузеров, а не для работы с сервером.

...