Вызов Python urllib.urlopen () не работает с URL, который принимает браузер - PullRequest
1 голос
/ 26 августа 2009

Если я укажу Firefox на http://bitbucket.org/tortoisehg/stable/wiki/Home/ReleaseNotes,, я получу страницу HTML. Но если я попробую это в Python:

import urllib

site = 'http://bitbucket.org/tortoisehg/stable/wiki/Home/ReleaseNotes'
req = urllib.urlopen(site)
text = req.read()

Я получаю следующее:

500 Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку или неверную конфигурацию и не смог выполнить ваш запрос.

Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 26 августа 2009

На первый взгляд, вы ничего не делаете неправильно, и, как показывает страница с ошибкой, вам следует обратиться к администраторам сайта, потому что они с журналами сервера, которые могут объяснить, что происходит. К счастью, администраторы сайта bitbucket - дружная компания!

Нет сомнений, что есть какой-то заголовок или комбинация заголовков, которые браузеры устанавливают в одну сторону, urllib - в другую, и в последнем случае ошибка на сервере исправляется. Вы можете хотеть видеть точно, какие заголовки отправляются, например. с firebug в firefox и воспроизводите их, пока вы точно не изолируете ошибку сервера; скорее всего, это будет пользовательский агент или какой-нибудь заголовок "accept", который щекочет эту ошибку.

3 голосов
/ 26 августа 2009

Вы не делаете ничего плохого, bitbucket обнаруживает некоторые пользовательские агенты (например, для обнаружения клиентов Mercurial). Просто изменение пользовательского агента исправляет его (если у него нет urllib как подстроки).

Вы должны заполнить вопрос относительно этого: http://bitbucket.org/jespern/bitbucket/issues/new/

0 голосов
/ 26 августа 2009

Я не думаю, что вы делаете что-то не так - похоже, этот сервер просто не работает? Ваш скрипт работал нормально для меня («текст» содержал те же данные, что и в браузере).

...