Выполнение запроса GET с помощью модуля python Запросы заканчиваются странным URL:
>>> import requests >>> r = requests.get("http://t.co/Uspy071j") >>> print r.url "http://feeds.feedburner.com/%257Er/LesArdoises/%257E3/bD2JuJagz5I/roxino-cest-tout-vert.html?utm_source=twitterfeed&utm_medium=twitter"
Этот URL заканчивается ошибкой 400. Но, используя RestKit для того же URL, final_url возвращает правильное значение:
>>> import restkit >>> r = restkit.request("http://t.co/Uspy071j", follow_redirect=True) >>> print r.final_url "http://lesardoises.com/6277/roxino-cest-tout-vert.html?utm_medium=twitter&utm_source=twitterfeed"
В чем проблема с запросами?
Это будет работать правильно, если вы установите текущую главную ветку из https://github.com/kennethreitz/requests.git вместо последней версии с тегами.
Запросы неверно цитируют тильды в последнем URL.Вместо того, чтобы запрашивать http://feedproxy.google.com/~r/LesArdoises/~3/bD2JuJagz5I/roxino-cest-tout-vert.html?utm_source=twitterfeed&utm_medium=twitter, он запрашивает http://feeds.feedburner.com/%257Er/LesArdoises/%257E3/bD2JuJagz5I/roxino-cest-tout-vert.html?utm_source=twitterfeed&utm_medium=twitter
. Я могу воспроизвести это в последнем выпуске Requests (0.10.1), но, похоже, это исправлено в невыпущенной основной (и разрабатываемой) ветке.
Коммит, который исправил эту ошибку, был https://github.com/kennethreitz/requests/commit/cb64d311719e627df0f78c8446d40326899206c3
Работает здесь:
In [6]: import requests In [7]: r = requests.get("http://t.co/Uspy071j") In [8]: r Out[8]: <Response [200]> In [9]: print r.url http://lesardoises.com/6277/roxino-cest-tout-vert.html?utm_medium=twitter&utm_source=twitterfeed