通过aiohttp url传递unicode

时间:2019-03-06 08:21:05

标签: python python-3.6 aiohttp

我正在尝试使异步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.6asyncio 3.4.3aiohttp 1.0.5

1 个答案:

答案 0 :(得分:1)

我自己找到了解决方法。

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。感谢您的评论:)