2013-02-10 1 views
4

У меня есть следующий код:Как получить код возврата HTTP из urlopib urlib python?

f = urllib.urlopen(url) 
html = f.read() 

Я хотел бы знать код статуса HTTP (HTTP 200, 404 и т.д.), которая исходит от открытия URL выше.

Кто-нибудь знает, как это можно сделать?

P.S. Я использую python 2.5.

Спасибо !!!

+1

Что такое код возврата HTML? Вы имеете в виду статус HTTP? –

ответ

10

Вы можете использовать .getcode() метод объекта, возвращенного urlopen()

url = urllib.urlopen('http://www.stackoverflow.com/') 
code = url.getcode() 
+2

Возможно, это потому, что я использую python 2.5, но я получаю следующее сообщение об ошибке: AttributeError: addinfourl instance не имеет атрибута 'getcode' – diemacht

3

getcode() была добавлена ​​только в Python 2.6. Насколько мне известно, нет способа получить код статуса из самого запроса в версии 2.5, но FancyURLopener предоставляет набор функций, которые вызываются по определенным кодам ошибок - вы могли бы использовать это, чтобы сохранить код состояния где-нибудь. Я подклассы его, чтобы сказать мне, когда 404 произошло

import urllib 

class TellMeAbout404s(urllib.FancyURLopener): 
    def http_error_404(self, url, fp, errcode, errmsg, headers, data=None): 
     print("==== Got a 404") 

opener = TellMeAbout404s() 
f = opener.open("http://www.google.com/sofbewfwl") 
print(f.info()) 

info() обеспечивает HTTP-заголовки, но не код статуса.