我是Python新手,尝试使用pyCurl。我正在研究的项目是为twitpic.com API创建一个Python包装器( http://twitpic.com/ api.do )。有关参考,请查看代码( http://pastebin.com/f4c498b6e )和错误I'得到( http://pastebin.com/mff11d31 )。

要特别注意代码的第27行,其中包含“xml = server.perform()”。在研究了我的问题后,我发现,与我之前的想法不同,.perform()不会从twitpic.com返回xml响应,但是在上传成功时没有返回(呃!)。

在进一步查看错误输出之后,在我看来,我想要填充到“xml”中的xml输入。而是将变量打印到以太标准输出或标准错误(不确定哪个)。我确信有一种简单的方法可以做到这一点,但我现在似乎无法想到这一点。如果你有任何提示可以指出我正确的方向,我会非常感激。提前谢谢。

有帮助吗?

解决方案

pycurl doc 明确说明:

  

perform() - >无

所以预期的结果就是你观察到的结果。

查看pycurl网站的一个例子:

import sys
import pycurl

class Test:
   def __init__(self):
       self.contents = ''

   def body_callback(self, buf):
       self.contents = self.contents + buf

print >>sys.stderr, 'Testing', pycurl.version

t = Test()
c = pycurl.Curl()
c.setopt(c.URL, 'http://curl.haxx.se/dev/')
c.setopt(c.WRITEFUNCTION, t.body_callback)
c.perform()
c.close()

print t.contents

接口需要一个类实例 - Test() - 使用特定的回调来保存内容。请注意调用 c.setopt(c.WRITEFUNCTION,t.body_callback) - 代码中缺少这样的内容,因此您不会收到任何数据( buf 例)。该示例显示了如何访问内容:

print t.contents

其他提示

如果您想要的只是响应数据,那么使用StringIO会更清晰,没有必要使用像这样的虚拟类......

这样的东西就足够了:

import pycurl
import cStringIO

response = cStringIO.StringIO()

c = pycurl.Curl()
c.setopt(c.URL, 'http://www.turnkeylinux.org')
c.setopt(c.WRITEFUNCTION, response.write)
c.perform()
c.close()

print response.getvalue()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top