异步网络请求,无法正确进行身份验证

时间:2021-06-01 22:34:15

标签: python asynchronous python-asyncio aiohttp

我一直在尝试编写一个 e621 采集器,虽然我想以异步方式进行,但我似乎无法使身份验证正常工作

当它返回“resp”时,它什么都不返回,因为身份验证是错误的。我知道细节是正确的,但我不确定如何在异步编程中做到这一点。任何帮助表示赞赏!谢谢!

async def main():
    async with aiohttp.ClientSession() as session:

        url = 'https://e621.net/posts.json?limit=2&'

        params = {'user-agent':'frbottest/0.0.1 (by Vaston on e621)'}
        async with session.get(url, params=params, auth=aiohttp.BasicAuth(apiUser, apiKey)) as resp:
            resp = await resp.json(content_type=None)

            content = await resp.json()

            print(content['url'])


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

1 个答案:

答案 0 :(得分:1)

事实证明,e621 要求您将标头放入请求中才能正确授权。无需使用 authparams 组件,您只是在 session 的定义中缺少标题字典。请参阅此处(只需将代理和关键占位符替换为您的 apiUserapiKey 值):

import asyncio
import aiohttp
import json

headers = {
  'User-Agent': '<my_agent>',
  'Authorization': 'Basic <my_key>'
}

async def main():
  async with aiohttp.ClientSession(headers=headers) as session:
    url = 'https://e621.net/posts.json?limit=2&'

    async with session.get(url) as resp:
      resp = await resp.json(content_type=None)
      print(json.dumps(resp.get('posts')[0], indent=2))

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
相关问题