您的位置:首页 > 编程语言 > Python开发

关于在python中获取CGI之POST请求data块内容

2013-03-04 21:14 375 查看
如题,今天困扰了我一会儿的一个问题。

客户端在制作一个bug自动上报机制时,需要服务器给提供一个cgi自动把bug发生时的日志及截图等上传到服务器。

因为需要传递大量数据(日志文件或图片?),使用POST方法。

客户端把日志文件写在了这个HTTP请求的content 段中,从抓包结果来看,我需要把这个没有名字的内容获取并保存下来。

尝试几种方法:

1)使用cgi.FieldStorage().file.read()方法。

类似这样:

form = cgi.FieldStorage()

if form.file is not None:
data = form.file.read()
else:
print "data is None"


可是却是data is None. 似乎form.file is None.奇怪ing. 失败!

2)使用fp来读取。

filedata = ''
MAXBYTES = 1024*1024*5

while len(filedata) < MAXBYTS:
data = form.fp.readline()
if data == '': break
filedata += data

print("content-length:%d"%len(filedata))


对于CGI模块,python的帮助文档写的不够详细,我想找一下对应的源码看,没找到,汗。。。此方法也未奏效。

3)使用另一种

import sys
raw_data = sys.stdin.read()

...

form = cgi.FieldStorage()


结果真的可以哦? 把content内容读取到了raw_data中了。注意这里要把raw_data = sys.stdin.read()这块放在调用form = cgi.FieldStorage()之前执行,否则读取到的为空。

我测试了一下确实如此。怀疑在cgi.FieldStorage()内部处理后把stdin里的都吃掉了。网上有文章说,如果使用cgi.FieldStorage()后,可以通过file.read()来获取raw post data。但是我试过却不行,why?

后续有空找源码看看了。不过目前有解决方案就好。有知道原因的请多多指教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: