我最近开始使用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()
提前致谢!
答案 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']
>>>