2012-01-18 37 views
1

有沒有什麼辦法可以從網址下載並保存每個單獨的塊,因爲它從服務器返回單獨的文件進行分析?你如何閱讀單個cUrl塊?

我有一個問題,當我想在服務器斬波JSON輸出,但我們得到的答覆該公司的結尾從在說「不,這不是」

當我們蜷縮在終端上停止在什麼我認爲是一個大塊,敲擊輸入返回更多的數據,這絕對是一個塊?

否則我想找到一個腳本,將每個塊保存到文件。

回答

1

基於從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) 
+0

這是如何拆分塊? – 2012-01-18 12:42:22

+0

@Joseph Le Brech:只要有數據需要保存,'w.write()'就會被libcurl調用。它可以是1個字節,可以是100KB。在這個函數裏面,你可以聚合/分割它來獲得你的塊(無論大塊是什麼意思)。我已經添加了'sys.stderr.write(data)',您可以在數據到達時看到它。大塊的 – jfs 2012-01-18 20:50:42

+0

,我的意思是從服務器端緩衝。 – 2012-01-19 10:09:08

2

我不知道如何讓curl做你想做的事(我甚至不認爲它可以使用BSD套接字API),但我想我可以幫助你調試你的問題。

我想你想要的是一個像Wireshark這樣的數據包嗅探器,它可以讓你檢查數據包的內容,並確切地看到「在電線上」發生了什麼。

+0

如何捲曲返回單獨的塊?它是否在塊之間發送轉義符?這將解釋爲什麼它會停留在我認爲是大塊的地方。 – 2012-01-18 12:39:28

+0

對wireshark +1,它是偉大的診斷這樣的問題 – muffinista 2012-01-18 12:45:26

+0

我不認爲curl返回單獨的塊。 TCP連接沒有塊的概念,只有流和窗口。 – cha0site 2012-01-18 12:47:51