【发布时间】:2021-08-17 22:11:42
【问题描述】:
我在使用 aiohttp Python 模块时遇到了麻烦:在某些情况下(并非总是,没有模式,只是随机发生),get 方法会产生意外的 URI...
我的客户端代码是这样的(URI 是虚拟的):
# Python 3
import aiohttp, async
async with aiohttp.ClientSession() as session:
URI = 'https://apiprovider.io/route?paran1=hi&key=hsaf4ed8f4ad6f874asd'
async with session.get(URI) as response:
result_data = await response.json()
错误信息(并非总是如此,而是随机的):
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with
unexpected mimetype: ', url=URL('https://apiprovider.io/route?paran1=hi&key=hsaf4ed8f4ad6f874asd')
Python 指责“解码 JSON”错误,但这只是真正问题的结果。
服务器响应是: {"status":"ERROR","request_id":"random_numb","error":"Unknown API Key"}
key "error":"Unknow API key" 是由于模块(或其他方式)更改了 de URI 而引起的。
原来的 URI 变成了https://apiprovider.io/route?paran1=hi&key=hsaf4ed8f4ad6f874asd'
请注意字符串末尾的单个 cote,它似乎成为 URI 本身的一部分……正好在“key”参数中。
如果我在浏览器中使用相同的 URI,最后只删除单个 cote,结果是正确的。
有人可以向我解释为什么会发生这种情况,我该如何解决?
我已经尝试更改 URI 参数的顺序,并且还尝试在 get 方法中使用“params”参数,如下所示:
[...]
async with session.get(URI, params={'key':key, 'param1'=hi}) as response:
[...]
这些都不起作用...错误会停止一段时间,但最终会回来。
非常感谢!
【问题讨论】:
-
为什么你认为 URL 的末尾有一个单引号?错误消息说:
URL('https://the_url')- 两个单引号都是 URL 字符串表示的一部分,实际上并不存在 in 字符串 -
非常感谢您的评论!我建议错误出现在单个 cote 中,因为如果我在浏览器中请求相同的 URL,我会收到服务器错误,即我的“key”arg 不正确(不是)......但是当我删除单个 cote 时,错误已修复......就像退格一样简单......注意:当错误出现时,单个代码被“附加”到 URL,这是我用来在浏览器中测试的那个(我复制了生成的链接通过错误并将其传递到我的浏览器中)。
标签: python python-3.x get aiohttp