【发布时间】:2021-06-13 08:22:12
【问题描述】:
解决此问题:
import yarl
async with cs.get(yarl.URL(f"https://ipqualityscore.com/api/json/url/{self.token}/{url}",encoded=True)) as r:
您好,我遇到了这个问题,AIOHTTP 将%3A 等字符转换为原始:。我需要在 API req 中使用 %3A 版本,如果没有,它会引发 404
我的代码:
for link in results:
url = urllib.parse.quote(link, safe = '')
await ctx.send(url)
## ^^ 1st ^^
async with aiohttp.ClientSession() as cs:
await ctx.send(f"https://ipqualityscore.com/api/json/url/{self.token}/{url}")
## ^^ 2nd ^^
async with cs.get(f"https://ipqualityscore.com/api/json/url/{self.token}/{url}") as r:
text = await r.json()
await ctx.send(text)
它应该使用的 URL:
https://ipqualityscore.com/api/json/url/PRIVATE_TOKEN/https%3A%2F%2Fstreancommunuty.ru%2Ftradoffer%2Fnew%2F%3Fpartner%3D1284276379%26token%3DiMDdLkoe
出现错误(并使用了 url):
aiohttp.client_exceptions.ContentTypeError: 0, message='Attempt to decode JSON with unexpected mimetype: text/html; charset=utf-8', url=URL('https://ipqualityscore.com/api/json/url/PRIVATE_TOKEN/https:%2F%2Fstreancommunuty.ru%2Ftradoffer%2Fnew%2F%3Fpartner=1284276379&token=iMDdLkoe')
错误更多解释/突出显示为图像
【问题讨论】:
-
aalways 将代码、数据和完整的错误消息作为文本(不是屏幕截图,不是链接)放在有问题的地方(不是评论)。
-
首先你可以检查你从
urllib.parse.quote()得到的print( url )。如果您使用:获得它,那么您可以手动将其替换为%3A-url = url.replace(':', "%3A") -
最终你可能会尝试引用
"%3A"或手动转换为%253A -
第三次使用URL时
cs是什么?似乎错误来自其get方法,由于某种原因,该方法部分取消引用了您提供的引用 URL。 -
@Blckknght
cs来自async with aiohttp.ClientSession() as cs: