Python Requests Invalid URL Label 错误

标签 python shopify

我正在尝试访问 Shopify 的 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

知道我为什么会收到这个吗?直接在浏览器中 curl /打开链接工作正常。是因为网址太长了吗?

谢谢!

最佳答案

错误('URL 有一个无效的标签。')可能是 requests 库中的错误:它应用 idna 编码(对于国际化域名)在附有用户信息的主机名上,source :

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

对于长用户名:密码,这可能会引发“标签为空或太长”错误。你可以试试report it on the requests' issue tracker .

a:b@example.com form is deprecated否则 requests.get('https://a:b@example.com') 应该等同于 requests.get('https://example.com', auth=(' a', 'b')) 如果用户名:密码中的所有字符都来自 [-A-Za-z0-9._~!$&'()*+,;=]设置。

curlrequests 也不同,然后在用户信息中有百分比编码的字符,例如,https://a:%C3%80@example.com 导致 curl 生成以下 http header :

Authorization: Basic YTrDgA==

但是请求产生:

Authorization: Basic YTolQzMlODA=

即:

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

关于Python Requests Invalid URL Label 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16470064/

相关文章:

javascript - 为特定 JS 文件 Hook Javascript Onload

python - Keras 自定义度量给出了不正确的张量形状

python - Pandas 中多索引的百分比

python - 适用于Python版本3.9的Numpy安装

css - Shopify CSS 中的 if 语句不起作用

api - 请求 Shopify API 以允许创建客户和订单

css - @font-face 不工作(Shopify)

jquery - Shopify Ajax API -/cart/update.js 无法更新产品数量

由于存在 'Not well-formed xml' 个字符,Python 给出 '&' 错误

python - 通过给出不是当前日期的引用日期作为参数来从文本中提取日期