Python请求中附带Cookies时出现Unicode编码错误。

4
我正在使用Python Requests访问包含JSON数据的HTTPS页面。 我在get请求中传递了2个参数,它们如下所列。 verify = False cookies = cookie 我知道verify = False是为了通过SSL认证验证,而cookies = cookie参数是为了传递cookie值。 实际上,我已经将2个cookie值放入字典中,其中一个值非常长,可能有300多个字符。 但是当我运行我的代码时,我会得到以下错误:
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2026' in position 602: ordinal not in range(256)

我的代码如下所示

import requests
test_url = "https://abc/cde"
cookie = {"cookie1":"value1(10 characters)", "cookie2":"value2(300+ characters)"}
response = requests.get(test_URL, verify=False, cookies= cookie)
print(response.content)
1个回答

3

\u2026HORIZONTAL ELLISPSIS字符,这在cookie中不是合法字符(参见此问答的回答)。

>>> r = requests.get('https://www.google.com', cookies={'mycookie': '\u2026'})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/me/virtual-envs/so310/lib/python3.10/site-packages/requests/api.py", line 75, in get 
    return request('get', url, params=params, **kwargs)
  File "/home/me/virtual-envs/so310/lib/python3.10/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
...
  File "/usr/local/lib/python3.10/http/client.py", line 1317, in _send_request
    self.putheader(hdr, value)
  File "/home/me/virtual-envs/so310/lib/python3.10/site-packages/urllib3/connection.py", line 224, in putheader
    _HTTPConnection.putheader(self, header, *values)
  File "/usr/local/lib/python3.10/http/client.py", line 1249, in putheader
    values[i] = one_value.encode('latin-1')
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2026' in position 9: ordinal not in range(256)

通常解决此问题的方法是使用不会暴露非法字符的编码方式对值进行编码,例如base64或带有转义Unicode字符的JSON,假设cookie的消费者将知道如何解码该值。否则,请从cookie值中删除此类字符。

嘿,我刚刚发现那个特定字符只有2个实例\u2026它在cookie值的中间某处,如果我只删除那个字符,这样可以吗?这不会影响我的请求吧?@snakecharmerb - PSR
1
假设它不会影响任何消费它的系统对cookie的解释,那就没问题了。 - snakecharmerb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接