是否有pycurl.FORM_FILE的替代方法,它接受要发送的字符串或流对象?

时间:2014-09-05 17:18:29

标签: python http libcurl pycurl

我最近开始使用pycurl,目前正在使用setop pycurl.FORM_FILE。但是我想要发送的数据是一个字符串,所以写一个文件就好了,这样下一个方法就可以读取它。

所以我的问题是:是否有pycurl.FORM_FILE的替代方法,它接受要发送的字符串或流对象(如文件对象)?

它与libcurl的FORM_STREAM相似。

readdata和readfunction不适合以多部分形式发布帖子。

类似的东西:

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 :(得分:2)

好的找到了解决方案。

我正在寻找的方法是使用pycurl.FORM_BUFFERPTR的pycurl.FORM_BUFFER。

可以在以下测试中找到它的用法:https://github.com/pycurl/pycurl/blob/66f2dec7838ed920a45e57520b95e99928396d93/tests/post_test.py

警告:如果你有旧版本的pycurl,它可能没有这个功能。

答案 1 :(得分: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']
>>>