Re: [問題] urllib或urllib2叫得到reponse code嗎ꄠ…
※ 引述《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)
推
11/03 15:22, , 1F
11/03 15:22, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章