2

我正在编写一个 Python 应用程序,它查询多个网络服务器,每台服务器每分钟一次。该应用程序可以正常运行几分钟,然后所有服务器开始响应并出现以下错误:

发生以下 cURL 错误:请求的 URL 返回错误:400 Bad Request

发生这种情况时,我看到我的输出带宽挂钩和两个 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

该机器是具有 6 GiB RAM 的双核 2.0 GHz Intel 机器,运行 Kubuntu 12.10 和 Python 2.7。一切都是用 VIM 编码的,所以没有乱七八糟的 IDE 代码乱跑。

4

1 回答 1

1

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

捕获和监控所有传入/传出流量(包括从应用程序发送的请求)的最简单方法是使用wireshark

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

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

c.setopt(pycurl.VERBOSE, 1)

于 2013-01-04T13:34:08.457 回答