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

来源:互联网 发布:思科软件下载 编辑:程序博客网 时间:2024/06/14 03:12

如题,今天困扰了我一会儿的一个问题。

客户端在制作一个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 sysraw_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?

 

后续有空找源码看看了。不过目前有解决方案就好。有知道原因的请多多指教。