其他人都注意到pycurl示例在Python 2上不起作用。*?
import pycurl
from StringIO import StringIO
buffer = StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'http://pycurl.sourceforge.net/')
c.setopt(c.WRITEDATA, buffer)
c.perform()
c.close()
body = buffer.getvalue()
# Body is a string in some encoding.
# In Python 2, we can print it without knowing what the encoding is.
print(body)
然后我得到了这样的失败
Traceback (most recent call last):
File "./get_python2.py", line 9, in <module>
c.setopt(c.WRITEDATA, buffer)
TypeError: invalid arguments to setopt
分配WRITEFUNCTION&amp;其他人似乎像宣传的那样运作。任何人都知道这里发生了什么?
答案 0 :(得分:6)
我认为docs表示当您没有真正的文件对象时必须使用WRITEFUNCTION
:
在Python 3和Python 2上,当值不是真正的文件对象时,WRITEDATA通过WRITEFUNCTION在PycURL中进行模拟。
所以你需要使用:
c.setopt(c.WRITEFUNCTION, buffer.write)
修改强>
PycURL Quickstart使用WRITEDATA作为StringIO的示例,但它需要PycURL&gt; =版本7.19.3:
从PycURL 7.19.3开始,WRITEDATA接受任何带有write方法的Python对象
答案 1 :(得分:0)
尝试 c.setopt(c.WRITEFUNCTION,buffer.write)
我有完全相同的问题,并且它以这种方式工作。 pycurl(7.19.0)