Python asyncio HTTP请求模块

Python asyncio http request module

这是我发出请求的方式:

1
2
3
4
5
    from aiohttp import request
    def make_request(self, request_payload, request_headers, request_method, request_url_path):
        url = self.config["HOST_URL"] +"/" + request_url_path
        response = yield from request(request_method, url=url, params=request_payload, headers=request_headers, allow_redirects=False)
        return response

如果请求成功,这里的预期响应是response status 302和响应中的Location标头,其中将包含需要进行重定向的url。

问题是,我的响应状态为200,这是来自最终URL的响应。 我怎样才能实现自己想要的?

" allow_redirects = False"应该起作用了,但是没有起作用。 我不确定如何才能使其按需工作。


注意:如果使用基于生成器的旧语法,则应使用装饰器asyncio.coroutine。 如果您使用的是Python 3.5+,则对协程使用新语法。

还请提供可复制的最小代码段(包括url,其他参数,您的Python版本),因为我没有得到您正在谈论的行为:

1
2
3
4
5
6
7
8
9
10
11
12
13
import asyncio
from aiohttp import request


@asyncio.coroutine
def make_request():
    url = 'http://httpbin.org/redirect/1'
    response = yield from request(method='GET', url=url, allow_redirects=False)
    print(response)


loop = asyncio.get_event_loop()
loop.run_until_complete(make_request())

输出:

1
2
<ClientResponse(http://httpbin.org/redirect/1) [302 FOUND]>
<CIMultiDictProxy('Connection': 'keep-alive', 'Server': 'meinheld/0.6.1', 'Date': 'Wed, 15 Nov 2017 16:28:55 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Content-Length': '215', 'Location': '/get', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'X-Powered-By': 'Flask', 'X-Processed-Time': '0.000524044036865', 'Via': '1.1 vegur')>

请求支持可选的allow_redirects参数,您可以将其设置为False。