吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1057|回复: 7
收起左侧

[求助] Python post发送数据的编码问题

[复制链接]
没有细胞的人 发表于 2022-1-19 18:59
不知道如何简短形容这个问题,只能细细赘述
某个网站想要post登录,参数都已经确定了,但是用户名不知道该如何传入(用户名是中文)

发现问题:
先是使用requests.post()发送请求,发现返回的一直是登陆失败;再用易语言发送请求,结果却是登陆成功

寻找原因:
上网查了一下,python中的requests.post()默认会将发送的数据进行url编码,用fiddler抓了下包,发送的数据是这个样子的
image.png
image.png
经过多次比对发现,导致登录失败的是textname,传入的数据是:%E5%BC%A0%E4%B8%89(经过url解码后是“张三”)

而易语言不进行url编码,fiddler抓包是这样的
image.png
image.png
(第二张图已进行url解码)(第一张图中的部分数据在发送前被我手动编码,因为有一个参数经过测试必须进行url编码,而textname这个参数经过实测绝对不能进行url编码)(textname参数已在图中用红线标出)

查看易语言发送数据时的textname十六进制数据为   { 0xD5, 0xC5, 0xC8, 0xFD },进行十进制转换再在易语言里面从字节集到文本得到正确解析
image.png (将D5,C5,C8,FD转换为了十进制)
image.png

而python requests发送数据进行url编码,textname十六进制数据为  { 0x25, 0x45, 0x35, 0x25, 0x42, 0x43, 0x25, 0x41, 0x30, 0x25, 0x45, 0x34, 0x25, 0x42, 0x38, 0x25, 0x38, 0x39 }
所以我的解决思路是在python发送数据时,让其发送我指定的二进制数据(当然也可以有其他解决方案,但是我没想到)


问题明确,尝试解决:
经过搜索后,网络建议不使用requests模块,而改用urllib模块
但是urllib构造post时,数据必须使用bytes类型,尝试过使用json.dumps再转bytes,也试了urllib.parser均无法直接传递“张三”的二进制数据
image.png

请问大佬我该怎么解决这个问题,可以不按照我的思路,球球了
image.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

青山绿水meng 发表于 2022-1-19 19:11
url=url,data=data
howsk 发表于 2022-1-19 19:25
F12下断点,调试textName的编码过程,里面会有js代码,也许不是和你的猜测一样。
ccwuax 发表于 2022-1-19 20:37
thepoy 发表于 2022-1-19 20:39
requests.post中的data参数可不只一个dict类型,还可以是str或bytes,你为什么不试试先手动把请求体转换为bytes后再发送请求呢?
qianshang666 发表于 2022-1-20 08:00
ccwuax 发表于 2022-1-19 20:37
urllib.parse.quote(url) ?

这个是urlencode,楼主这个是二进制形式,不一样
ligxi 发表于 2022-1-20 11:50
urllib.parse.urlencode(data)
ligxi 发表于 2022-1-20 11:56
import requests
headers={...} //自填
data={...} //自填
url='' //自填
data=urllib.parse.urlencode(data) //后面不要加.encode('utf8')试试看
response=requests.post(url=url, headers=headers, data=data)
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表