是否有替代pycurl.FORM_FILE的选项,可以接受字符串或流对象?
我最近开始使用pycurl,现在正在用setop pycurl.FORM_FILE。不过我想发送的数据是一个字符串,所以为了让下一个方法能读取它,写个文件就显得有点奇怪。
所以我想问的是:有没有其他方法可以替代pycurl.FORM_FILE,直接发送一个字符串或者一个流对象(就像文件对象那样)?
这就像libcurl中的FORM_STREAM。
readdata和readfunction在处理多部分表单的POST请求时是行不通的。
像这样:
import pycurl
c = pycurl.Curl()
c.setopt(c.URL, 'http://someurl')
c.setopt(c.FORM_FILE, 'myfile.gz')
c.perform()
c.close()
会变成:
import pycurl
c = pycurl.Curl()
fobj = open('myfile.gz', 'rb')
c.setopt(c.URL, 'http://someurl')
c.setopt(c.FORM_STREAM, fobj)
c.perform()
fobj.close()
c.close()
提前谢谢大家!
2 个回答
0
看看 StringIO
,它的详细信息可以在这个链接找到:https://docs.python.org/2/library/stringio.html。这个东西可以让你创建一个像文件一样的对象。
>>> import StringIO
>>> f_obj = StringIO.StringIO('foo')
>>> dir(f_obj)
['__doc__', '__init__', '__iter__', '__module__', 'buf', 'buflist', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'len', 'next', 'pos', 'read', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines']
>>>
2
好的,我找到了解决办法。
我需要的方法是 pycurl.FORM_BUFFER 和 pycurl.FORM_BUFFERPTR。
你可以在下面的测试中找到它的用法:https://github.com/pycurl/pycurl/blob/66f2dec7838ed920a45e57520b95e99928396d93/tests/post_test.py
注意:如果你使用的是旧版本的 pycurl,可能没有这个功能。