pycurl和很多回调函数

2024-09-26 22:50:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的URL列表,我必须并行下载并检查每个响应返回的一个头。在

我可以使用CurlMulti进行并行化。 我可以使用/dev/null作为fb,因为我对body不感兴趣,只对headers感兴趣。在

但是我怎样才能检查每个标题呢?在

要接收标头,必须设置HEADERFUNCTION回调。我明白了。在

但在这个回调函数中,我只得到带头的缓冲区。如何区分一个请求和另一个请求?在

我不喜欢创建像url那样多的回调函数的想法。我应该创建一些类和该类的实例吗?也不是很聪明。在


Tags: 函数devurl标题列表fbbodynull
3条回答

我将使用Python内置的httplib和线程模块。我看不需要第三方模块。在

解决方案是使用一点函数编程将一些附加信息“粘贴”到回调函数中。在

functools.partial

我知道你在问pycurl,但我发现它太难用了,而且不太和谐。API很奇怪。在

下面是一个twisted示例:

from twisted.web.client import Agent
from twisted.internet import reactor, defer

def get_headers(response, url):
    '''Extract a dict of headers from the response'''
    return url, dict(response.headers.getAllRawHeaders())

def got_everything(all_headers):
    '''print results and end program'''
    print dict(all_headers)
    reactor.stop()

agent = Agent(reactor)
urls = (line.strip() for line in open('urls.txt'))
reqs = [agent.request('HEAD', url).addCallback(get_headers, url) for url in urls if url]
defer.gatherResults(reqs).addCallback(got_everything)
reactor.run()

此示例异步启动所有请求,并收集所有结果。以下是具有3个URL的文件的输出:

^{pr2}$

相关问题 更多 >

    热门问题