Python请求无效的URL Lab

2024-09-28 22:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图访问shoppify的API,它使用的URL格式是- https://apikey:password@hostname/admin/resource.xml

例如http://7ea7a2ff231f9f7:95c5e8091839609c864@iliketurtles.myshopify.com/admin/orders.xml

执行$curl api_url操作时会下载正确的XML

 import requests
 api_url = 'http://7ea7a2ff231f9f7d:95c5e8091839609c864@iliketurtles.myshopify.com/admin/orders.xml'
 r = requests.get(api_url) # Invalid url label error

知道我为什么要得到这个吗?直接在浏览器中卷曲/打开链接工作正常。是因为URL的长度太长了吗?在

谢谢!在


Tags: httpscomapihttpurladmin格式xml
2条回答

错误('URL has an invalid label.')可能是requests库中的一个错误:它对附加了userinfo的主机名应用idna编码,source

netloc = netloc.encode('idna').decode('utf-8')

这可能会导致长时间的“标签为空或太长”错误用户名:密码。你可以试试report it on the requests' issue tracker。在

^{} form is deprecated否则 ^如果所有字符用户名:密码是来自[-A-Za-z0-9._~!$&'()*+,;=]集。在

curlrequests也不同,因此用户信息中存在百分比编码字符,例如,https://a:%C3%80@example.com导致{}生成以下http报头:

^{pr2}$

但是requests产生:

Authorization: Basic YTolQzMlODA=

即:

>>> import base64
>>> base64.b64decode('YTrDgA==')
'a:\xc3\x80'
>>> print _
a:À
>>> base64.b64decode('YTolQzMlODA=')
'a:%C3%80'

不是URL的长度。如果我这样做:

import requests
test_url = 'http://www.google.com/?somereallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongurl=true'
r = requests.get(test_url)

返回<Response [200]>

您是否尝试使用请求验证参数detailed here发出请求

^{pr2}$

相关问题 更多 >