gpt4 book ai didi

python - 对 dict 中的 Unicode 字符进行编码以作为 POST 请求中的数据发送

转载 作者:行者123 更新时间:2023-12-01 06:35:03 24 4
gpt4 key购买 nike

如果您检查此页面 ( http://buses.com/EN/cr/index.php ) 并在 From 部分输入 GolfitoTo 部分 Cañon del Guarco(日期和其他部分并不重要)您将被重定向到带有时间表的页面。我正在用 python 处理请求,并想通过代码来完成。在检查了 POST 请求发送的数据类型后,我创建了一个包含以下键和值的字典

d = {'fromClass': 'Golfito',
'toClass': 'Cañon del Guarco',
'viaClass': '',
'jDate': '01/12/2020',
'jTime': '21:20',
'addtime': '0',
'lang': 'en',
'b2': 'Search connection'}

我调用了 requests 库的 post 函数:

r = requests.post('http://horariodebuses.com/EN/cr/index.php', data=d)

它基本上会失败,声称他们的数据库没有任何Cañon del Guarco,即使我可以通过他们的网站这样做。 (如果你将r另存为html文件,你可以自己看到)但是,如果您将“To”部分更改为另一个没有任何 unicode 的城市(例如 Liberia),它将起作用。通过代码(通过更改 toClass)以及通过网站。它基本上会通过代码查找具有 unicode 字符的城市失败。

我的字典编码不正确吗?

编辑:我尝试通过执行以下操作使用 utf-8 对所有值进行编码:

data = {k: str(v).encode("utf-8") for k,v in d.items()}

编辑2:我能够使用 Google 开发控制台查看表单数据

最佳答案

此页面不使用 UTF-8,而是使用 ISO-8859-1 或类似的内容,因为它将 ñ 转换为 %F1ISO-8859-1 转换为 \xf1 但它也给出结果。

import requests
import webbrowser

d = {
'fromClass': 'Golfito',
'toClass': 'Cañon del Guarco',
'viaClass': '',
'jDate': '01/12/2020',
'jTime': '21:20',
'addtime': '0',
'lang': 'en',
'b2': 'Search connection'
}

d = {k: str(v).encode("ISO-8859-1") for k,v in d.items()}
r = requests.post('http://horariodebuses.com/EN/cr/index.php', data=d)
print(r.encoding) # ISO-8859-1
print(r.request.body)

with open('output.html', 'wb') as f:
f.write(r.content)
webbrowser.open('output.html')
<小时/>

编辑: urllib.parse.urlencode() 和标题 Content-Type': 'application/x-www-form-urlencoded' 发送 %F1 表示 ñ ,发送 + 表示空格,并给出结果

import requests
import urllib.parse
import webbrowser

d = {
'fromClass': 'Golfito',
'toClass': 'Cañon del Guarco',
'viaClass': '',
'jDate': '01/12/2020',
'jTime': '21:34',
'addtime': '0',
'lang': 'en',
'b2': 'Search connection'
}

d = urllib.parse.urlencode(d, encoding='ISO-8859-1')
h = {'Content-Type': 'application/x-www-form-urlencoded'}
#print(d)

r = requests.post('http://horariodebuses.com/EN/cr/index.php', data=d, headers=h)

#print(r.encoding)
#print(r.request.body)
#print(r.request.headers)

with open('output.html', 'wb') as f:
f.write(r.content)
webbrowser.open('output.html')

关于python - 对 dict 中的 Unicode 字符进行编码以作为 POST 请求中的数据发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59710076/

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