2010-08-19 90 views
1

我的代碼使用httplib從PHP頁面提取CSV數據。當我在Firefox或Chrome中打開頁面時,數據顯示得很好。然而,當我試圖用我的python代碼獲取它時,我得到一個內容長度爲0並且沒有數據的標題。這個頁面是唯一一個這樣做的 - 在同一個目錄的另一個頁面中,python httplib抓取工作得很好。有人能告訴我我做錯了什麼嗎?PHP將內容長度0返回給python的urllib

代碼:

FILE_LOC = '/core/csv.php' 
argstr = '?type=' + self.type + '&id=' + self.id 
conn = httplib.HTTPConnection(SERVER_ADDRESS) 
conn.request('GET', FILE_LOC + argstr) 
resp = conn.getresponse() 
csvstr = resp.read() 

響應標頭:

[('content-length', '0'), ('x-powered-by', 'PHP/5.1.6'), 
('server', 'Apache/2.2.3 (CentOS)'), ('connection', 'close'), 
('date', 'Thu, 19 Aug 2010 21:39:44 GMT'), ('content-type', 'text/html; charset=UTF-8')] 
+1

無法看到您正在調用的PHP腳本而無法分辨。你是否確定'type'和'id'參數有價值? – 2010-08-19 21:48:48

+1

很難說你的情況是怎麼回事,但是我發現「'wget -S'」可以用來調試這種類型的問題。 – Adam 2010-08-19 22:42:52

回答

1

也許PHP腳本期望看到httplib的模塊不發送一些HTTP標頭或報頭。例如,默認情況下,httplib似乎不會發送Accept,Accept-Language或User-Agent標頭。您可能需要將其中一個或多個添加到request()調用中。它似乎發送了一個適當的主機頭,但是,這是我的第一個猜測。

+0

我的猜測是'Accept'標題在這裏是關鍵的,但是OP沒有指定urllib是否工作的其他url是否是CSV。 'text/csv'可能是一個很好的嘗試。 – aaronasterling 2010-08-19 22:57:01

1

可能在用戶代理頭上過濾 - 嘗試欺騙例如你的Firefox。

如果您未能使用Firefox連接到本地Python服務器來查看它正在發送什麼標題,然後複製它們。

+1

我不是-1,但你可以用firebug來查看firefox發送的是什麼頭文件;)另外,除了'可能'而不是'可能'之外,我不確定爲什麼這會被downvoted。還有其他事情要先檢查。 – aaronasterling 2010-08-19 22:59:51

+0

嘿,我不知道!有用。 – katrielalex 2010-08-20 08:27:32