从应用程序捕获完整请求

时间:2012-12-17 20:11:11

标签: python curl

我正在编写一个Python应用程序,每个服务器每分钟查询几个Web服务器。应用程序运行正常几分钟,然后所有服务器开始响应以下错误:

  

发生以下cURL错误:请求的网址返回错误:400错误请求

当发生这种情况时,我看到我的输出带宽挂钩和两个CPU核心都在80%以上工作(在这台机器上名义上非常轻载)。但是,内存使用率并未受到显着影响。

有没有办法捕获从特定应用程序发送的所有请求的整个请求?或者,在Python中我可以捕获完整的请求,然后将其输出以进行调试吗?以下是查询服务器的代码部分:

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

该机器是双核2.0 GHz英特尔机箱,带有6 GiB RAM,运行Kubuntu 12.10和Python 2.7。所有内容都在VIM中编码,因此没有虚假的IDE代码在运行。

1 个答案:

答案 0 :(得分:1)

  

有没有办法捕获从特定应用程序发送的所有请求的整个请求?

捕获和监控所有传入/传出流量的最简单方法是使用wireshark

  

或者,在Python中我可以捕获完整的请求然后将其输出以进行调试吗?

您可以添加以下调试选项,以便curl打印有关请求的一些有用信息:

  

c.setopt(pycurl.VERBOSE,1)