Вызов Python urllib.urlopen() не работает с URL, который принимает браузер

StackOverflow https://stackoverflow.com/questions/1335439

  •  20-09-2019
  •  | 
  •  

Вопрос

Если я укажу 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 Внутренняя ошибка сервера Сервер столкнулся с внутренней ошибкой или неправильной настройкой и не смог выполнить ваш запрос.

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

Это было полезно?

Решение

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

Вы должны заполнить вопрос, касающийся этого: http://bitbucket.org/jespern/bitbucket/issues/new/

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top