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 请求参数中的汉字进行编码?

14 回复

怎么感觉是 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 库的问题

> 因为浏览器会帮我编码成 %E8%8B%B9%E6%9E%9C

所以你的问题不就是把文字转换成 URL 编码咯 ?

自己都提出问题了,随手百度都是找得到的吧

#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

回到顶部