我是python的初学者,我编码了这个小脚本以在本地服务器(本地主机)上发送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。