dahua1 发表于 2022-3-29 12:41:38

请问这个post是什么编码发包的的

本帖最后由 dahua1 于 2022-3-29 12:43 编辑

抓到一个post的包,是multipart/form-data的


美国有线电视新闻网网站1月4日报道称这段字符串编码成了 ÃÀ¹úÓÐÏßµçÊÓÐÂÎÅÍøÍøÕ¾1ÔÂ4ÈÕ±¨µÀ³Æ
请问这个要怎么编码

cxxjackie 发表于 2022-3-29 12:41:39

GBK编码,这个应该是错用UTF-8解码所以变成了乱码,把每个字符转Unicode再GBK解码就正常了。js做gbk编解码非常麻烦,因为原生不支持,可以的话尽量用别的语言解决。如果只关心解码而不需要编码,可以用以下代码实现:
const str = 'ÃÀ¹úÓÐÏßµçÊÓÐÂÎÅÍøÍøÕ¾1ÔÂ4ÈÕ±¨µÀ³Æ';
const array = str.split('').map(c => c.charCodeAt(0));
const uint8 = Uint8Array.from(array);
const decoder = new TextDecoder('gbk');
console.log(decoder.decode(uint8));
如果需要编码,有两种思路:第一种是模拟form表单提交,指定accept-charset属性为GBK,即可实现自动编码。你这个网站的请求就是用form做的,不过form提交会发生页面跳转、不能跨域、无法获取返回值等等,局限性挺大的。第二种是找一些别人写好的库来解决(原理是字符映射,文件不小),编码后的效果就是你发的那些百分号,发送请求的关键是不要用FormData来做,而是写成'A=B&C=D'这种字符串形式,指定Content-Type为:application/x-www-form-urlencoded;charset=UTF-8

李恒道 发表于 2022-3-29 12:59:13

这个看着不像什么通用编码
感觉可能自己对字符串做换算了
只能靠逆向反推?

dahua1 发表于 2022-3-29 13:06:21

李恒道 发表于 2022-3-29 12:59
这个看着不像什么通用编码
感觉可能自己对字符串做换算了
只能靠逆向反推? ...

看上去和上传图片时候的编码差不多
function dosubmit() {
document.form1.action = "post/new?bid=1&action=Post";
document.form1.target = "_self";
document.form1.submit();
}
提交按钮指向这个函数,不知道怎么反推

李恒道 发表于 2022-3-29 13:12:11

dahua1 发表于 2022-3-29 13:06
看上去和上传图片时候的编码差不多
function dosubmit() {
document.form1.action = "post/new?bid=1&a ...

网站看看?

王一之 发表于 2022-3-29 13:16:21

就是一个formData的请求,这应该不能说是编码,是数据原文,数据原文就是这样,显示出来是乱码

dahua1 发表于 2022-3-29 13:39:52

王一之 发表于 2022-3-29 13:16
就是一个formData的请求,这应该不能说是编码,是数据原文,数据原文就是这样,显示出来是乱码 ...

-----------------------------23214671055070535092923987219
Content-Disposition: form-data; name="subject"

如果想通过异步方法先后检测用户名和密码
-----------------------------23214671055070535092923987219
Content-Disposition: form-data; name="sub"

67
-----------------------------23214671055070535092923987219
Content-Disposition: form-data; name="body"

如果想通过异步方法先后检测用户名和密码如果想通过异步方法先后检测用户名和密码,需要先异步检测用户名,然后再异步检测密码的情况下就很适合 Promise。
-----------------------------23214671055070535092923987219
Content-Disposition: form-data; name="value"

0
-----------------------------23214671055070535092923987219
Content-Disposition: form-data; name="embed"

on
-----------------------------23214671055070535092923987219
Content-Disposition: form-data; name="bid"

1
-----------------------------23214671055070535092923987219
Content-Disposition: form-data; name="done"

/post/page?bid=1
-----------------------------23214671055070535092923987219--



我不加编码发包的时候直接显示的是汉字,成功的帖子显示的是这样的乱码

濡傛灉鎯抽?氳繃寮傛?鏂规硶鍏堝悗妫?娴嬬敤鎴峰悕鍜屽瘑鐮?

李恒道 发表于 2022-3-29 13:45:45

dahua1 发表于 2022-3-29 13:06
看上去和上传图片时候的编码差不多
function dosubmit() {
document.form1.action = "post/new?bid=1&a ...
看了下...这个好像真是数据原文...没任何加密
一之哥哥说得对
我对原生不了解
等一之哥哥解答吧

dahua1 发表于 2022-3-29 13:58:54

本帖最后由 dahua1 于 2022-3-29 14:00 编辑

王一之 发表于 2022-3-29 13:16
就是一个formData的请求,这应该不能说是编码,是数据原文,数据原文就是这样,显示出来是乱码 ...
要怎么发出数据原文这种包呢,我用下面的方式发出去,成功以后帖子是乱码
    var 数据 = {
      "subject":"如果想通过异步方法先后检测用户名和密码",
      "sub":"67",
      "body":"如果想通过异步方法先后检测用户名和密码,需要先异步检测用户名,然后再异步检测密码的情况下就很适合 Promise。",
      "value":"0",
      "embed":"on",
      "bid":"1",
      "done":"\/post\/page?bid=1",
    }
var 链接 = "http://www.cjsdn.net/post/new?bid=1&action=Post"

post3(链接,数据,function (返回数据){})

function post3(url,jsondata,callback){
    var xhr = new XMLHttpRequest();
    xhr.open('post', url, true);
    var formData = new FormData();
    for (var key in jsondata) {
      formData.append(key, jsondata)
    }
    xhr.send(formData);
    xhr.onload = function () {
      if(xhr.readyState==4&&xhr.status==200){
            callback(xhr.responseText);
      }
    }
}

王一之 发表于 2022-3-29 14:11:20

dahua1 发表于 2022-3-29 13:58
要怎么发出数据原文这种包呢,我用下面的方式发出去,成功以后帖子是乱码
    var 数据 = {
      "subj ...

不能直接发么?
页: [1] 2
查看完整版本: 请问这个post是什么编码发包的的