如何将参数和标头传递给 aiohttp ClientSession

Posted

技术标签:

【中文标题】如何将参数和标头传递给 aiohttp ClientSession【英文标题】:How to pass params and headers to aiohttp ClientSession 【发布时间】:2020-05-05 14:13:55 【问题描述】:

我希望将paramsheaders 传递给aiohttp.ClientSession,如图所示here。

这是我尝试过的:

    async def make_request(self, url, headers, params):
        async with aiohttp.ClientSession(headers=headers, params=params) as session:
            async with self.limit, session.get(url=url) as response:
                await asyncio.sleep(self.rate)
                resp = await response.read()
                return resp
async def process(url, url_id, update_id, rate, limit):
    limit = asyncio.BoundedSemaphore(limit)

    f = Fetch(
        rate=rate,
        limit=limit,
    )

    if "coinmarketcap" in url:
        params = 
            'start': '1',
            'limit': '1',
            'convert': 'USD,BTC'
        
        headers = 
            'Accepts': 'application/json',
            'X-CMC_PRO_API_KEY': API_KEY,
        
    else:
        params = 
        headers = 

    result = await f.make_request(url, headers, params)

但我得到了错误:

Unexpected Argument at:
async with aiohttp.ClientSession(headers=headers, params=params) as session

如果 URL 是 coinmarketcap 和 no params/headers,我希望设置标题。 如何解决?

【问题讨论】:

【参考方案1】:

params 属性不能传递给会话。您需要在 get 调用中发送它,如下所示:

    async def make_request(self, url, headers, params):
        async with aiohttp.ClientSession(headers=header) as session:
            async with self.limit, session.get(url=url, params=params) as response:
                await asyncio.sleep(self.rate)
                resp = await response.read()
                return resp

您可以在客户端会话初始化或 get 调用中发送标头。我认为两者都可以。

【讨论】:

天哪!我怎么错过了?谢谢@PirateNinjas :)

以上是关于如何将参数和标头传递给 aiohttp ClientSession的主要内容,如果未能解决你的问题,请参考以下文章

Aiohttp:如何在标头中发送字节?

PUT 参数如何传递给页面?

如何在PHP中传递SOAP标头和Body作为参数

如何使用命令(API)和查询(odata)控制器将位置标头传递给响应

如何将日期标头添加到 WebRequest

如何将 Swift 字符串数组传递给采用 char ** 参数的 C 函数