【问题标题】:how to pass headers to async with session.get()如何使用 session.get() 将标头传递给异步
【发布时间】:2021-02-19 08:50:11
【问题描述】:

我想知道如何在下面的 get 调用中传递标头

headers = {
'User-Agent': 'Mozilla'
}
async def fetch(url, session):
async with session.get(url) as response:
    resp = await response.read()
    return resp

我尝试了以下但没有得到任何响应。

headers = {
'User-Agent': 'Mozilla'
}
async def fetch(url, session):
async with session.get(url, headers=headers) as response:
    resp = await response.read()
    return resp

目标是在异步模式下调用不同的 url。需要知道是否还有其他替代方式,但无论如何,都需要传递标头以获得正确的响应。

【问题讨论】:

  • 您有理由相信标头没有正确发送吗?如果是这样,您是如何得出结论的?
  • @user4815162342 我尝试在相同的代码中使用正常的“requests.get(url, headers=headers)”,但当涉及到这行代码时却没有。跨度>
  • requestsaiohttp 之间可能存在与User-Agent 无关的其他内容。在假设 headers=headers 不起作用之前,您应该检查是否正在发送 User-Agent。例如,您可以向仅记录收到的标头等的服务器发出请求。

标签: python-asyncio aiohttp requests-futures


【解决方案1】:

您可以使用 httpbin.org 进行请求,以查看服务器如何查看您的请求:

import asyncio
import aiohttp
from pprint import pprint


headers = {
    'User-Agent': 'Mozilla'
}


async def fetch(url, session):
    async with session.get(url, headers=headers) as response:
        res = await response.json()
        pprint(res)


async def main():
    async with aiohttp.ClientSession() as session:
        await fetch("http://httpbin.org/get", session)


asyncio.run(main())

结果:

{'args': {},
 'headers': {'Accept': '*/*',
             'Accept-Encoding': 'gzip, deflate',
             'Host': 'httpbin.org',
             'User-Agent': 'Mozilla',
             'X-Amzn-Trace-Id': 'Root=1-602f94a7-3aa49d8c48ea04345380c67b'},
 'origin': '92.100.218.123',
 'url': 'http://httpbin.org/get'}

如您所见,'User-Agent': 'Mozilla' 已发送。

【讨论】:

    猜你喜欢
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多