Python asyncio http请求模块

时间:2017-11-15 12:42:32

标签: python python-asyncio http-redirect aiohttp

以下是我提出请求的方式:

    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标头,其中包含需要重定向的网址。

问题是,我的响应状态为200,这是最终网址的响应。我怎样才能实现我的目标?

" allow_redirects =假"应该有用,但它没有。我不确定如何才能让它按照我的需要工作。

2 个答案:

答案 0 :(得分:1)

注意:如果您使用旧的基于生成器的语法,则应使用装饰器asyncio.coroutine。如果您使用的是Python 3.5+,请使用new syntax for coroutines

请提供可以复制的最小代码段(包括url,其他参数,你的Python版本),因为我没有得到你所说的行为:

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())

输出:

<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')>

答案 1 :(得分:0)

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