實際需求場景是想讓爬蟲只通過檢驗http的返回碼,以此校驗之前下載的某個資源是否還在線;因為并不需要下載響應體,所以使用了requests的Session對象并在動詞方法中添加了stream = True的參數,如下:
s = requests.Session()
s.mount('http://', requests.adapters.HTTPAdapter(pool_connections=1, pool_maxsize=1))
for i in range(20):
url = "http://www.site.com/resources/%s" % i
with closing(s.get(url, allow_redirects = False, stream = True)) as r:
print r.status_code
因為啟用了stream = True模式,未下載響應體的情況下,連接不會關閉,肯定是無法重用連接池中的連接了,可是強制關閉連接的話,日志輸出是這樣:
INFO - connectionpool.py[249] - Resetting dropped connection: www.site.com
感覺這個“Resetting dropped connection”跟文檔里寫的不太一致呢? requests的文檔中寫道:
如果你在請求中把 stream 設為 True,Requests 無法將連接釋放回連接池,除非你 消耗了所有的數據,或者調用了 Response.close。
文檔說關閉響應后Requests應該被“釋放回連接池”,但實際上它是被關閉然后再需要時被“重新設置”了,跟不加stream = True參數時,“無縫”重用似乎是不一樣的。
那么究竟該怎么做才能做到既不下載相應體,又能重用連接呢?還有關閉請求、關閉連接應該是一回事吧?
添加回答
舉報
0/150
提交
取消