gpt4 book ai didi

Python 请求编码 POST 数据

转载 作者:IT老高 更新时间:2023-10-28 20:40:17 26 4
gpt4 key购买 nike

版本:Python 2.7.3

其他库:Python-Requests 1.2.3、jinja2 (2.6)

我有一个向论坛提交数据的脚本,但问题是非 ascii 字符显示为垃圾。例如,像 André Téchiné 这样的名字出现为 André© Téchiné。

提交数据的方式如下:

1) 数据最初是从 UTF-8 编码的 CSV 文件加载的,如下所示:

entries = []
with codecs.open(filename, 'r', 'utf-8') as f:
for row in unicode_csv_reader(f.readlines()[1:]):
entries.append(dict(zip(csv_header, row)))

unicode_csv_reader 来自 Python CSV 文档页面的底部:http://docs.python.org/2/library/csv.html

当我在解释器中输入条目名称时,我看到的名称是 u'Andr\xe9 T\xe9chin\xe9'

2) 接下来我通过 jinja2 渲染数据:

tpl = tpl_env.get_template(u'forumpost.html')
rendered = tpl.render(entries=entries)

当我输入在解释器中呈现的名称时,我再次看到相同的内容:u'Andr\xe9 T\xe9chin\xe9'

现在,如果我将渲染变量写入这样的文件名,它会正确显示:

with codecs.open('out.txt', 'a', 'utf-8') as f:
f.write(rendered)

但我必须发到论坛:

3) 在我的 POST 请求代码中:

params = {u'post': rendered}
headers = {u'content-type': u'application/x-www-form-urlencoded'}
session.post(posturl, data=params, headers=headers, cookies=session.cookies)

session 是一个请求 session 。

并且该名称在论坛帖子中显示已损坏。我尝试了以下方法:

  • 省略标题
  • 编码呈现为 render.encode('utf-8')(结果相同)
  • rendered = urllib.quote_plus(rendered) (全部为 %XY)

如果我输入 render.encode('utf-8') 我会看到以下内容:

'Andr\xc3\xa9 T\xc3\xa9chin\xc3\xa9'

我该如何解决这个问题?谢谢。

最佳答案

您的客户的行为应有尽有,例如运行 nc -l 8888 作为服务器并发出请求:

import requests

requests.post('http://localhost:8888', data={u'post': u'Andr\xe9 T\xe9chin\xe9'})

显示:

POST / HTTP/1.1
Host: localhost:8888
Content-Length: 33
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate, compress
Accept: */*
User-Agent: python-requests/1.2.3 CPython/2.7.3

post=Andr%C3%A9+T%C3%A9chin%C3%A9

您可以检查它是否正确:

>>> import urllib
>>> urllib.unquote_plus(b"Andr%C3%A9+T%C3%A9chin%C3%A9").decode('utf-8')
u'Andr\xe9 T\xe9chin\xe9'
  • 检查服务器是否正确解码请求。您可以尝试指定字符集:

    headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}

    正文仅包含 ascii 字符,因此它不会受到伤害,并且正确的服务器无论如何都会忽略 x-www-form-urlencoded 类型的任何参数。在 URL-encoded form data 中寻找血腥细节

  • 检查问题不是显示伪影,即值正确但显示不正确

关于Python 请求编码 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17417620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com