2010-08-19 68 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