Pycurl重定向选项被忽略,断言尝试从网络上读取视频失败了?

时间:2014-02-23 04:56:42

标签: python curl file-io libcurl pycurl

我正在尝试编写一个程序来读取寻找文件链接的网页,然后尝试使用curl / libcurl / pycurl下载。我有一切正常工作的pycurl,当我在终端使用curl命令时,我可以让文件下载。 curl命令如下所示:

curl -LO https://archive.org/download/TheThreeStooges/TheThreeStooges-001-WomanHaters1934moeLarryCurleydivxdabaron19m20s.mp4

这会导致一次重定向(输出中读取为全0的文件)然后正确下载该文件。当我删除-L标志(所以命令只是-O)时,它只到达第一行,它找不到文件,然后停止。

但是当我尝试在Python脚本中使用pycurl执行相同的操作时,我无法成功将[Curl对象] .FOLLOWLOCATION设置为1,这应该相当于-L标志。 python代码如下所示:

c = [class Curl object] # get a Curl object
fp = open(file_name,'wb')
c.setopt(c.URL , full_url) # set the url
c.setopt(c.FOLLOWLOCATION, 1)
c.setopt(c.WRITEDATA , fp)
c.perform()

当它运行时,它将转到c.perform()并显示以下内容:

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

是否缺少重定向,或者我之前是否遗漏了其他内容,因为我对cURL相对较新?

1 个答案:

答案 0 :(得分:0)

当我为c.perform()步骤启用详细输出时,我能够发现我认为/我的程序存在的潜在问题。第一行被有效标记,表明正在重用一个开放的连接。

我最初将文件打包到面向对象的设置中,而不是脚本,因此curl对象已被读取并重新使用而不会被关闭。因此,在第一次连接尝试失败后,由于我没有正确设置选项,它重新使用了与网站/服务器的连接(可能是连接设置错误)。 通过让脚本关闭任何现有的Curl对象并在文件下载之前创建一个新对象来解决问题。