作者sbrhsieh (偶尔想摆烂一下)
看板Python
标题Re: [问题] urllib或urllib2叫得到reponse code吗ꄠ…
时间Mon Nov 2 21:46:28 2009
※ 引述《alexsh (alexsh)》之铭言:
: 标题: [问题] urllib或urllib2叫得到reponse code吗?(2.5)
: 时间: Sun Nov 1 00:37:41 2009
:
: 虽然自己是在用2.6.4了,但维护的python project目前最高还是只到2.5…之前把原本用
:
: httplib的换用urllib,没注意到这个差异…结果server上跑的还是2.5.2,跑到读HTTP
:
: response code就爆炸了。
:
: 文件的部份我能扫的大致都扫过了还是没找到…板上大大们有相关的经验吗?
: --
: → sbrhsieh:可以. 不过要讨论前要先让别人知道你用了哪些东西. 11/01 01:18
抱歉,我之前是讲错了,Python 2.5 内附的 urllib module 的确是没有像
Python 2.6 附的 urllib 可以简单从 url opener 产生的 addinfourl 取得
HTTP response code。
我认为目前你可以考虑暂时先客制一个 url opener 来使用,比如:
import urllib
class HTTPURLOpener(urllib.FancyURLopener):
def __init__(self, *args, **kw):
urllib.FancyURLopener.__init__(self, *args, **kw)
def http_error(self, url, fp, errcode, errmsg, headers, data=None):
self.http_code = errcode
return urllib.FancyURLopener.http_error(self, url, fp, errcode, errmsg, headers, data)
def open_http(self, url, data=None):
ret = urllib.FancyURLopener.open_http(self, url, data)
if hasattr(self, 'http_code'):
ret.http_code = self.http_code
del self.http_code
else:
ret.http_code = 200
return ret
如果你都是简单使用 urllib module 里的 utility method(urlopen ...),你可以
设定 HTTPURLOpener instance 为预设的 url opener。
Ex:
import urllib
urllib._urlopener = HTTPURLOpener()
a = urllib.urlopen('
http://www.python.org/download/Python40.exe')
print 'HTTP response:', a.http_code
如果你是直接使用 urllib.FancyURLopener,可以改成使用 HTTPURLOpener。
如果使用自己客制的 url opener,可以参考 HTTPURLOpener 的作法来修改你的
url opener。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.142.243
※ 编辑: sbrhsieh 来自: 218.173.142.243 (11/02 21:48)
1F:推 alexsh:谢谢 11/03 15:22