Передача юникода через aiohttp url - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь сделать асинхронную функцию GET, но когда URL содержит строку Unicode (я использовал корейскую букву), это происходит 400 Bad Request.Нет проблем, когда я использую запросы, но только aiohttp выдает ошибку.Как я могу решить эту проблему?

запросы

import requests

def get():
    response = requests.get("some url with unicode")
    return response

get()    # 200 OK

aiohttp

import asyncio
import aiohttp

async def get():
    response = await aiohttp.request("GET", "some url with unicode")
    return response

loop = asyncio.get_event_loop()
loop.run_until_complete(get())    # 400 Bad Request

Я использую Python 3.6, asyncio 3.4.3, aiohttp 1.0.5.

1 Ответ

1 голос
/ 06 марта 2019

Я сам нашел решение.

from urllib import parse

url = "some url with unicode"
parsed = parse.urlparse(url)
parsed = parse.parse_qs(parsed.query)
encoded = parse.urlencode(parsed, doseq=True)
url = "{}?{}".format("url base without parameters", encoded)

Затем url кодируется как строка ascii, и я получил 200 OK.Спасибо за комментарии:)

...