Re: [問題] urllib或urllib2叫得到reponse code嗎ꄠ…

看板Python作者 (偶爾想擺爛一下)時間15年前 (2009/11/02 13:46), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1AxkAtZo (Python)
討論串 (同標題文章)
文章代碼(AID): #1AxkAtZo (Python)