我是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的默认字符集
你不应该手动构造参数。用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请求-> 我如何在节点中使用相同。我尝试了请求,超级代理,但无法通过证书。 提前致谢! 问题答案: 这对我有用 -