Python asyncio http 请求模块

Posted

技术标签:

【中文标题】Python asyncio http 请求模块【英文标题】:Python asyncio http request module 【发布时间】:2018-04-28 16:43:41 【问题描述】:

这是我提出请求的方式:

    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" 应该有效,但它没有。我不确定如何让它按我的需要工作。

【问题讨论】:

【参考方案1】:

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

还请提供可复制的最少代码 sn-p(包括 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')>

【讨论】:

【参考方案2】:

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

【讨论】:

它是带下划线的allow_redirects,而不是连字符。 请浏览整个帖子,先生。在代码中,我使用了正确的标志。

以上是关于Python asyncio http 请求模块的主要内容,如果未能解决你的问题,请参考以下文章

Python asyncio http 请求模块

深究Python中的asyncio库-asyncio简介与关键字

python asyncio 异步 I/O - 实现并发http请求(asyncio + aiohttp)

python:asyncio模块

Python标准模块--asyncio

Python之asyncio模块的使用