当前位置: 首页 > 知识库问答 >
问题:

使用http在GET请求中进行字符编码。客户端库(Python)

马新觉
2023-03-14

我是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的解决方案。但我想是的。当我查看http文档时。客户,我可以看到:

HTTPConnection.request

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

共有1个答案

滕无尘
2023-03-14

你不应该手动构造参数。用urlencode代替:

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

因此,您可以:

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

还要注意,在URL转义之前,yout字符串将被编码为UTF-8。

 类似资料:
  • 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的。您可以查看 HTTP 协议 了解更多相关信息。 以下是来自于浏览器端的重要头信息,您可以在 Web 编程中频繁使用: 头信息 描述 Accept 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常

  • 如何在基于网络的 HTTP 客户端中重试 HTTP 请求? 请考虑以下处理程序,如果收到 HTTP 响应代码 503,它将尝试在 1 秒后重试 HTTP 请求: 在本例中,当我写入通道时,管道中的其他处理程序会看到HttpObjects,但实际上不会再次执行HttpRequest——只接收到一个HttpResponse。 我认为在这种情况下我只是滥用了 Channel,我需要创建一个新的通道(表示

  • 问题内容: 我正在尝试使用请求获取正确的编码。 不管我做什么,丹麦字符的编码都不对。 有什么想法吗? 问题答案: 也许您的麻烦在于标题。假设您的标题为 如果是这样,您有2种方法可以解决此问题: 删除此标题 使用以下代码解压缩数据: });

  • Java import java.io.IOException; import java.net.URLEncoder; import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import jav

  • 问题内容: 我有一个node.js Connect服务器,用于检查请求的Cookie。为了在节点中测试它,我需要一种写客户端请求并将cookie附加到它的方法。我知道HTTP请求对此具有’cookie’标头,但是我不确定如何设置和发送它- 我还需要在同一请求中发送POST数据,因此我目前正在使用danwrong的restler模块,但似乎没有让我添加该标头。 关于如何使用硬编码的cookie和PO

  • 问题内容: 我可以使用curl发出GET请求-> 我如何在节点中使用相同。我尝试了请求,超级代理,但无法通过证书。 提前致谢! 问题答案: 这对我有用 -