python - 使用 http.client lib (Python) 的 GET 请求中的字符编码

标签 python utf-8 get httprequest python-3.3

我是 python 的初学者,我编写了这个小脚本以在我的本地服务器 (localhost) 上发送 HTTP GET 请求。它工作得很好,除了我希望我可以发送拉丁字符,例如重音符号。

import http.client

httpMethod = "GET"
url = "localhost"
params = "Hello World"

def httpRequest(httpMethod, url, params):
    conn = http.client.HTTPConnection(url)
    conn.request(httpMethod, '/?param='+params)
    conn.getresponse().read()
    conn.close()
    return

httpRequest(httpMethod, url, params)

当我在参数“params”中插入带重音的单词时,出现的错误消息如下:

UnicodeEncodeError:“ascii”编解码器无法对位置 14 中的字符“\xe9”进行编码:序号不在范围内 (128)

我不知道是否有使用 http.client 库的解决方案,但我认为是的。当我查看文档 http.client 时,我可以看到:

HTTPConnection.request

字符串编码为 ISO-8859-1,HTTP 的默认字符集

最佳答案

您不应该手动构造参数。使用 urlencode相反:

>>> from urllib.parse import urlencode
>>> params = 'Aserejé'
>>> urlencode({'params': params})
'params=Aserej%C3%A9'

所以,你可以这样做:

conn.request(httpMethod, '/?' + urlencode({'params': params}))

另请注意,您的字符串在进行 URL 转义之前将被编码为 UTF-8

关于python - 使用 http.client lib (Python) 的 GET 请求中的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16985810/

相关文章:

jquery - 使用 jQuery 具有不同输入变量的多个 Ajax HTTP GET 请求

python - 如何检查numpy矩阵的列中的所有值是否相同?

python - 如何安装 Python 配方文件 (.py)?

java - 有没有一种简单的方法可以将一个字节附加到 StringBuffer 并指定编码?

http - 在 GET 请求中发送用户电子邮件是否安全?

python - 如何使用 pycassa 和 uuid key 获取数据

Python优化如何在列表中查找重复值和值索引

python - 打开(名称 ,"rb")因为 f 不需要关闭,对吗?

mysql - 在mysql 5.1中选择unicode字符u2028

mysql - MySQL 备份上的 Git 的 Ascii 压缩