好友
阅读权限20
听众
最后登录1970-1-1
|
不知道如何简短形容这个问题,只能细细赘述
某个网站想要post登录,参数都已经确定了,但是用户名不知道该如何传入(用户名是中文)
发现问题:
先是使用requests.post()发送请求,发现返回的一直是登陆失败;再用易语言发送请求,结果却是登陆成功
寻找原因:
上网查了一下,python中的requests.post()默认会将发送的数据进行url编码,用fiddler抓了下包,发送的数据是这个样子的
经过多次比对发现,导致登录失败的是textname,传入的数据是:%E5%BC%A0%E4%B8%89(经过url解码后是“张三”)
而易语言不进行url编码,fiddler抓包是这样的
(第二张图已进行url解码)(第一张图中的部分数据在发送前被我手动编码,因为有一个参数经过测试必须进行url编码,而textname这个参数经过实测绝对不能进行url编码)(textname参数已在图中用红线标出)
查看易语言发送数据时的textname十六进制数据为 { 0xD5, 0xC5, 0xC8, 0xFD },进行十进制转换再在易语言里面从字节集到文本得到正确解析
(将D5,C5,C8,FD转换为了十进制)
而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均无法直接传递“张三”的二进制数据
请问大佬我该怎么解决这个问题,可以不按照我的思路,球球了 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|