欢迎访问宙启技术站
智能推送

使用Python的requests_futures.sessions模块发送并发HTTP请求

发布时间:2023-12-25 22:11:37

requests_futures模块是基于requests模块的一个扩展,它提供了一个可以使用并发技术发送HTTP请求的功能。使用requests_futures.sessions模块可以实现对多个URL同时发送请求,并在请求完成后获取响应。

以下是一个使用Python的requests_futures.sessions模块发送并发HTTP请求的示例:

from future.moves import concurrent
import requests
from requests_futures.sessions import FuturesSession

# 创建一个FuturesSession对象
session = FuturesSession()

# 定义一个回调函数来处理并发请求的响应
def handle_response(r, *args, **kwargs):
    response = r.response
    print(response.status_code)
    print(response.text)

# 声明一个列表来保存请求的Future对象
futures = []

# 向多个URL发送GET请求
urls = ['http://www.example.com', 'http://www.google.com', 'http://www.github.com']
for url in urls:
    future = session.get(url)
    future.add_done_callback(handle_response)
    futures.append(future)

# 等待所有请求完成
concurrent.futures.wait(futures)

print("All requests completed!")

在上面的示例中,首先从future.moves模块导入concurrent,然后导入requests和FuturesSession。然后,我们创建一个FuturesSession对象,该对象允许我们发送异步请求。

接下来,我们定义了一个回调函数handle_response来处理发送请求后的响应。回调函数将被每个请求的Future对象调用,并且在请求完成后被执行。这里我们只是简单地打印响应的状态码和文本。

然后,我们声明一个空列表futures来保存请求的Future对象。

在下一步中,我们定义了一个URL列表,并使用循环遍历列表中的每个URL。对于每个URL,我们通过FuturesSession对象的get方法发送GET请求,并使用add_done_callback方法为每个请求添加回调函数。然后,我们将每个请求的Future对象添加到futures列表中。

最后,通过concurrent.futures.wait方法等待所有请求的完成。一旦所有请求完成,将会执行打印提示消息"All requests completed!"。