Python 3.x UnicodeErrorPython 3&;请求

Python 3.x UnicodeErrorPython 3&;请求,python-3.x,python-requests,shopify,Python 3.x,Python Requests,Shopify,我以前在Python2.7中使用过请求,但从未遇到过这个问题。现在我用Python3编写代码,它甚至无法连接到服务器 我不断收到错误:UnicodeError:标签为空或太长 用于说明的简化代码: shop_url = "https://APIKEY:CODE@SHOP.ECOMMERCE.com/admin/" def get_products(): url = shop_url + "products.json" r = requests.get(url=url, para

我以前在Python2.7中使用过请求,但从未遇到过这个问题。现在我用Python3编写代码,它甚至无法连接到服务器

我不断收到错误:
UnicodeError:标签为空或太长

用于说明的简化代码:

shop_url = "https://APIKEY:CODE@SHOP.ECOMMERCE.com/admin/"

def get_products():
    url = shop_url + "products.json"
    r = requests.get(url=url, params={"limit": "250"})
    response = r.json()
    print(response)
我已经读过,它与url在连接到服务器之前的IDNA编码有关

有人知道如何解决这个问题吗

编辑:
我找到了解决方案,而不是在URL中传递APIKEY&代码。我可以将其作为HTTPBasicAuth传递到标题中。url更改为
“http://SHOP.ECOMMERCE.com/admin/“
和IDNA不再提供任何问题。

我找到了解决方案,而不是在URL中传递APIKEY和代码。我可以将其作为HTTPBasicAuth传递到标题中。url更改为“”,IDNA不再出现任何问题。

根据位于的报告(仍处于打开状态!),这里的问题是Python 3中的
请求现在将url传递到
IDNA.py
(与Python 2不同)

idna.py
尝试在将主机名传递到
socket.gethostbyname()
之前检查主机名是否正常。它首先检查名称的第一个组件(或者可能每个组件)的长度是否小于64个字符

(主机名的每个点分隔组件(在中称为“标签”)都有长度限制。因此,检查背后的想法是合理的,因为根据标准,长度超过64个字符的主机名组件无效。):

标签必须遵循ARPANET主机名的规则。他们必须 以字母开头,以字母或数字结尾,并具有内部 仅限字母、数字和连字符。还有一些 长度限制。标签必须不超过63个字符

不幸的是,当
idna.py
检查主机名长度时,它包括从协议分隔符到第一个
字符的所有内容,包括URL中指定的任何基本身份验证参数


正如您已经发现的那样,解决方法是在请求头中提供auth参数。

您使用的是什么版本的请求?python 3.6&requests 2.12.4Edit:刚刚更新到2.13.0,不幸的是并没有解决问题。对于在这里遇到障碍的人。我不知道为什么lib要求如此严格。我在源代码中寻找了一个简单的解决方法,没有运气。因此,这里是要发送的头(因为上面没有明确提到它们)<代码>标题={'Authorization':SHOPIFY_KEY,'X-SHOPIFY-Access-Token':SHOPIFY_PASSWORD,}
以上对我有用。Shopify文档目前和往常一样,在标题和所有主题上都有错误和打字错误#就业保障。好的平台,没有帮助的支持。