网络请求报错问题 UnicodeEncodeError: ‘latin-1‘ codec can‘t encode characters in position 38-39

现象描述:

最近写的一份代码,在自己电脑环境下跑的好好的,但是部署到了linux就报了此错误。
详细报错如下:

	  File "/usr/local/python3/lib/python3.9/site-packages/bi_slave-3.0-py3.9.egg/bi_slave/common/http_sync.py", line 145, in __call__
	    resp = self.send_request()
	  File "/usr/local/python3/lib/python3.9/site-packages/bi_slave-3.0-py3.9.egg/bi_slave/common/http_sync.py", line 202, in send_request
	    resp = session.send(prep, **send_kwargs)
	  File "/usr/local/python3/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
	    r = adapter.send(request, **kwargs)
	  File "/usr/local/python3/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
	    resp = conn.urlopen(
	  File "/usr/local/python3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 665, in urlopen
	    httplib_response = self._make_request(
	  File "/usr/local/python3/lib/python3.9/site-packages/urllib3/connectionpool.py", line 387, in _make_request
	    conn.request(method, url, **httplib_request_kw)
	  File "/usr/local/python3/lib/python3.9/http/client.py", line 1253, in request
	    self._send_request(method, url, body, headers, encode_chunked)
	  File "/usr/local/python3/lib/python3.9/http/client.py", line 1294, in _send_request
	    self.putheader(hdr, value)
	  File "/usr/local/python3/lib/python3.9/http/client.py", line 1226, in putheader
	    values[i] = one_value.encode('latin-1')
	UnicodeEncodeError: 'latin-1' codec can't encode characters in position 38-39: ordinal not in range(256)

第一步:

在网络上找问题分析,

https://stackoverflow.com/questions/66339110/python-session-get-response-uses-latin-1-instead-of-utf-8-encoding

发现几乎雷同一大堆,都是关于改写源码的 latin-1 为 utf-8,源码修改 总感觉不太好,,,

第二步:

从报错可以看出:self.putheader(hdr, value) 可知应该是请求头的报错;
由报错和第一步可知,和编码有关,而 latin-1编码适用于 大小写英文字母,阿拉伯数字,及常用的标点符等,那么是不是有些超出了此范围呢?
经过检查发现,请求头中:referer防盗链 brand_name 包含 汉字

headers['referer'] = 'https://www.zhihu.com/search?q={}&type=content&sort=created_time'.format(brand_name)

遂将 汉字进行url编码

from urllib.parse import quote
headers['referer'] = 'https://www.zhihu.com/search?q={}&type=content&sort=created_time'.format(quote(brand_name))

至此,搞定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值