Python requests 库如何对 GET 请求参数中的汉字进行编码?
比如我想把 苹果 作为 get 参数发送到后台,在浏览器上是可以的,因为浏览器会帮我编码成 %E8%8B%B9%E6%9E%9C,但是 python 的 requests 库就不知道怎么搞了
url_pre = "http://127.0.0.1/seq?kw="
kws = [
“苹果”
]
for key in kws:
r = requests.get(url_pre + key)
print r
因为运行会提示出错 SyntaxError: Non-ASCII character '\xe6' in file
Python requests 库如何对 GET 请求参数中的汉字进行编码?
怎么感觉是 python 或者定义字符串的问题 并不是库的问题
直接给个例子你就明白了。在 requests 里,你只需要把参数放在 params 字典里,库会自动处理编码,不用你自己操心。
import requests
# 把参数直接写成字典,汉字放进去就行
params = {
'keyword': '你好世界',
'page': 1
}
# 发起请求
response = requests.get('https://httpbin.org/get', params=params)
# 打印实际请求的URL,看看编码结果
print('实际请求的URL:', response.url)
# 输出类似:https://httpbin.org/get?keyword=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C&page=1
# 查看服务器返回的解析结果
print('服务器收到的参数:', response.json()['args'])
核心就一点:用 params 参数传字典,requests 会用 UTF-8 把汉字转成百分号编码(比如 %E4%BD%A0),这是符合标准的做法。
你可能会看到有人手动拼接 URL 或者用 urllib.parse.quote,但在 requests 里完全没必要,而且容易出错。记住,所有参数都交给 params 字典,让库去处理编码,这是最省事、最不容易出错的方法。
总结:用params字典传参,别自己手动编码。
应该不是这么拼的吧,另外报错是文件编码问题
不是 requests 库的问题
#coding: utf-8
您可能旧版软件的受害者 
善用关键字搜索 “ python 汉字 URL ”
祝你好运。
urllib.parse.quote(key)
response = requests.get(url_pre + key)
response.encoding = "gbk"
requests 有时候不能正确识别网页编码
你可能是 python2 的受害者
代码头部 加上这两行
# -- coding:utf-8 --
# coding:utf-8
默认 python 源代码文件不能输入汉字,加上这两行就行了
In [1]: import requests
In [2]: requests.utils.quote(“中文”)
Out[2]: '%E4%B8%AD%E6%96%87’
urllib.urlencode
urllib.quote
urllib.unquote
urllib.parse.quote()
反之,还原请求参数用: urllib.parse.unquote()
谢谢 #5 #10
加了 coding 就搞定了,我是用 python2 的
# -- coding:utf-8 --
# coding:utf-8


