我正在编写一个Python应用程序,通过cURL查询社交媒体API.我查询的大多数不同服务器(Google +,Reddit,Twitter,Facebook等)都有cURL抱怨:
额外的东西不精细transfer.c:1037:0 0
不寻常的是,当应用程序首次启动时,每个服务的响应将抛出此行一次或两次.几分钟后,该线将出现几次.显然,cURL正在识别它不喜欢的东西.大约半小时后,服务器开始超时,这条线重复了几十次,所以它显示出一个真正的问题.
我怎么诊断这个?我尝试使用Wireshark来捕获请求和响应头,以寻找可能导致卷曲抱怨异常,但对于所有的Wireshark的复杂性似乎没有被隔离,只显示标题的方式.
以下是代码的相关部分:
output = cStringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0')
c.setopt(c.WRITEFUNCTION, output.write)
c.setopt(c.CONNECTTIMEOUT, 10)
c.setopt(c.TIMEOUT, 15)
c.setopt(c.FAILONERROR, True)
c.setopt(c.NOSIGNAL, 1)
try:
c.perform()
toReturn = output.getvalue()
output.close()
return toReturn
except pycurl.error, error:
errno, errstr = error
print 'The following cURL error occurred: ', errstr
Run Code Online (Sandbox Code Playgroud)
aba*_*ert 28
我99.99%肯定这实际上并不在任何HTTP标头中,而是被打印stderr出来libcurl.可能这发生在您记录标题的过程中,这就是您感到困惑的原因.
无论如何,快速搜索"additional stuff not fine" curl transfer.c发现了源的最近变化,其描述是:
Curl_readwrite:删除调试输出
前一段时间为了调试目的添加了"附加内容不合适"的文本,但它并没有真正帮助任何人,并且由于某些原因,一些Linux发行版提供了他们的libcurls构建,调试信息仍然存在,因此(太多)用户阅读此信息.
所以,这基本上是无害的,你看到它的唯一原因是你有一个libcurl(可能来自你的Linux发行版)的一个版本,启用了完整的调试日志(尽管curl作者认为这是一个坏主意).所以你有三个选择:
libcurl.libcurl没有调试信息重建.您可以查看libcurl源代码transfer.c(如上所述)以尝试了解curl抱怨的内容,并可能在同一时间在邮件列表中查找线程 - 或者只是通过电子邮件发送列表并询问.
但是,我怀疑实际上可能与真正的问题无关,因为你从一开始就看到了这一点.
这里有三个明显的问题可能出错:
实际上第一个似乎是最不可能的.如果要排除它,只需捕获您所做的所有请求,然后编写一个简单的脚本,使用其他库来重放完全相同的请求,并查看是否获得相同的行为.如果是这样,问题显然不能实现您的请求.
您可以根据时间区分情况2和3.如果所有服务都立刻超时 - 特别是如果他们都在不同的时间开始点击它们(例如,你在Facebook之后15分钟开始点击Google+,但他们都在你点击Facebook后30分钟就超时) ,它肯定是案例2.如果不是,它可能是案例3.
如果你排除所有这三个,那么你可以开始寻找其他可能错误的东西,但我会从这里开始.
或者,如果您告诉我们更多关于您的应用程序的确切内容(例如,您是否尝试尽可能快地点击服务器?您是否尝试代表一些不同的用户进行连接?您使用的是dev密钥或最终用户应用程序密钥等等),对那些具有这些服务经验的其他人可能会猜测.
| 归档时间: |
|
| 查看次数: |
16486 次 |
| 最近记录: |