【问题标题】:Assertion failed in pycurl when trying to get image from web尝试从网络获取图像时,pycurl 中的断言失败
【发布时间】:2012-11-07 22:28:58
【问题描述】:

我正在尝试使用以下代码从网站获取图像:

image="http://the.site.com/view/ashx/Handler.ashx?Command=Avatar&TC=TQB"
curlobj = pycurl.Curl()
curlobj.setopt(pycurl.COOKIEFILE, '')
curlobj.setopt(pycurl.CONNECTTIMEOUT, 30)
curlobj.setopt(pycurl.TIMEOUT, 30)
curlobj.setopt(pycurl.FAILONERROR, True)
curlobj.setopt(pycurl.FOLLOWLOCATION, 1)
curlobj.setopt(pycurl.MAXREDIRS, 5)
imgf = open("logo.jpg", "wb")
curlobj.setopt(pycurl.URL, image)
curlobj.setopt(pycurl.WRITEDATA, imgf)
curlobj.perform()
imgf.close()
curlobj.close()

但它给出了:

python2`.6: src/pycurl.c:272: get_thread_state: Assertion `self->ob_type == p_Curl_Type' failed.`

有什么问题?

谢谢

【问题讨论】:

  • 您在哪一行收到此错误?您是如何安装 pycurl(以及 libcurl 和 python,如果它们没有内置在您的系统中)?还有哪些版本?
  • @abarnert:它不会引发异常并且不会给出行!只有这个错误;但使用调试器它发生在.perform() 行;我从 Ubuntu 的存储库(Lucid Lynx 上的版本 7.19.0-3)安装了 pycurl,并且在 Ubuntu 上预装了 python(版本 2.6.5)。 libcurl 是 7.19.7

标签: python curl pycurl


【解决方案1】:

当我的代码出现此错误时,可以通过确保 curl/pycurl 不重用现有连接来修复它。

如果您在 c.perform() 之前启用 c.setopt(c.VERBOSE , 1) 它将在输出中提供更多(调试)信息,并且前几行应该告诉您它是否正在建立新连接c.perform() 的开头。

【讨论】:

  • 感谢您将我指向setopt VERBOSE。所以我看到实际上 no 重定向并且内容已经加载(我看到所有响应标头以及正确的Content-Length。仍然是pycurl.c中的assert命中。我真的必须让我的 curl 实例保持活动状态,因为它带有一个 cookie。有什么想法吗?
  • 发现问题:如果我Connection: keep-alive 并重复使用相同的curl 实例,那么当然只有当所有perform()s 与此curl 地址相同@ 987654331@(主机名)。真丢人。但也许它可以帮助别人:)
猜你喜欢
  • 2014-03-24
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
相关资源
最近更新 更多