有沒有什麼辦法可以從網址下載並保存每個單獨的塊,因爲它從服務器返回單獨的文件進行分析?你如何閱讀單個cUrl塊?
我有一個問題,當我想在服務器斬波JSON輸出,但我們得到的答覆該公司的結尾從在說「不,這不是」
當我們蜷縮在終端上停止在什麼我認爲是一個大塊,敲擊輸入返回更多的數據,這絕對是一個塊?
否則我想找到一個腳本,將每個塊保存到文件。
有沒有什麼辦法可以從網址下載並保存每個單獨的塊,因爲它從服務器返回單獨的文件進行分析?你如何閱讀單個cUrl塊?
我有一個問題,當我想在服務器斬波JSON輸出,但我們得到的答覆該公司的結尾從在說「不,這不是」
當我們蜷縮在終端上停止在什麼我認爲是一個大塊,敲擊輸入返回更多的數據,這絕對是一個塊?
否則我想找到一個腳本,將每個塊保存到文件。
基於從docs for pycurl.Curl() object例子:
#!/usr/bin/env python
import sys
from contextlib import closing as C
import pycurl
class Writer:
def __init__(self, file):
self.file = file
def write(self, data):
sys.stderr.write(data)
self.file.write(data)
def close(self):
self.file.close()
url = 'http://stackoverflow.com/questions/8909710/'
with C(pycurl.Curl()) as c, C(Writer(open('output','wb'))) as w:
c.setopt(c.URL, url)
c.setopt(c.WRITEFUNCTION, w.write)
c.setopt(c.FOLLOWLOCATION, True)
c.perform()
print >>sys.stderr, c.getinfo(c.HTTP_CODE), c.getinfo(c.EFFECTIVE_URL)
我不知道如何讓curl做你想做的事(我甚至不認爲它可以使用BSD套接字API),但我想我可以幫助你調試你的問題。
我想你想要的是一個像Wireshark這樣的數據包嗅探器,它可以讓你檢查數據包的內容,並確切地看到「在電線上」發生了什麼。
如何捲曲返回單獨的塊?它是否在塊之間發送轉義符?這將解釋爲什麼它會停留在我認爲是大塊的地方。 – 2012-01-18 12:39:28
對wireshark +1,它是偉大的診斷這樣的問題 – muffinista 2012-01-18 12:45:26
我不認爲curl返回單獨的塊。 TCP連接沒有塊的概念,只有流和窗口。 – cha0site 2012-01-18 12:47:51
這是如何拆分塊? – 2012-01-18 12:42:22
@Joseph Le Brech:只要有數據需要保存,'w.write()'就會被libcurl調用。它可以是1個字節,可以是100KB。在這個函數裏面,你可以聚合/分割它來獲得你的塊(無論大塊是什麼意思)。我已經添加了'sys.stderr.write(data)',您可以在數據到達時看到它。大塊的 – jfs 2012-01-18 20:50:42
,我的意思是從服務器端緩衝。 – 2012-01-19 10:09:08