HTTP響應尋求我從urllib的支持從Python中
response = urllib2.urlopen('http://python.org/')
HTTP響應最後,我希望能夠seek()
響應(至少在初期)內非阻塞流。所以,我希望能有這樣的代碼:
print result.readline()
result.seek(0)
print result.readline()
解決這個問題的最簡單的辦法是StringIO
或io.BytesIO
這樣的:
result = io.BytesIO(response.read())
然而,事情是資源我想請求往往非常大,我想在整個下載完成之前開始與他們合作(解析...)。 response.read()
正在阻止。我正在尋找一個非阻塞解決方案。
理想的代碼將read(BUFFER_SIZE)
從資源和每當需要更多的內容,只是從響應請求更多。我基本上在尋找一個可以做到這一點的包裝類。哦,我需要一個像對象一樣的文件。
我想,我可以寫這樣的:
base = io.BufferedIOBase(response)
result = io.BufferedReader(base)
然而,事實證明,這並不工作,我從io module嘗試了不同的類別,但不能得到它的工作。我對任何具有所需行爲的包裝類感到滿意。
1.您可以使用'readline()',它可能讀取整個響應,如果沒有換行符。 2.你應該檢查已保存的數據**的大小加上要保存的行的大小不超過'buffer_size',否則你的緩衝風險大於'buffer_size'。 –
@Piotr Dobrogost謝謝你指出。代碼不完整,當然不安全。它缺少read(),也不支持來自請求模塊的響應。但是,它起到了這個作用。 – dominik