首页 新闻 会员 周边

模拟POST提交,数据乱码

0
悬赏园豆:100 [已关闭问题] 关闭于 2013-09-24 20:42

通过抓包工具抓取的提交的数据也是乱码,实在不从下手,望高人指点。

冬菜的主页 冬菜 | 初学一级 | 园豆:12
提问于:2012-01-29 22:32
< >
分享
所有回答(8)
0

兄弟进行编码.

迅捷网络[来送福利] | 园豆:578 (小虾三级) | 2012-01-30 08:49

自己整理好不就完了吗?

支持(0) 反对(0) 守护甜心 | 园豆:186 (初学一级) | 2012-01-30 19:22

问题在于,这是从一个网页上抓取的,怎么编码?   拷贝那段乱码数据赋值给一个string ???  如果只是响应的数据的话倒是可以尝试下各种编码,问题是提交的数据也是乱码,这咋处理,希望我表达的清楚了。

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-01-30 20:59
0

请问下是用什么模拟的POST提交,如果是HttpWebRequest的模拟,你可以用下面这段代码,然后在服务器端用同样的编码格式,就不会乱码了

  public string POST(string uri)
{
//Web访问对象
string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
myRequest.Method = "POST";
myRequest.ContentType = "text/json; charset=utf-8";
myRequest.CookieContainer = cookie;
// 获得接口返回值
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();

StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);

string ReturnXml = reader.ReadToEnd();

reader.Close();
myResponse.Close();

return ReturnXml;
}

如果是js方式的话先用escape将数据进行编码,然后在服务器端进行解码。

az235 | 园豆:8483 (大侠五级) | 2012-01-30 09:28

这段是抓取的网页的提交,不是模拟的,所以不知道该怎么处理

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-01-30 21:00

@Jamie_1019: 那就用下面这段

   static string PostDataToUrl(byte[] data, string url)
{
#region 创建httpWebRequest对象
WebRequest webRequest = WebRequest.Create(url);
HttpWebRequest httpRequest = webRequest as HttpWebRequest;
if (httpRequest == null)
{
throw new ApplicationException(
string.Format("Invalid url string: {0}", url)
);
}
#endregion

#region 填充httpWebRequest的基本信息
httpRequest.UserAgent = sUserAgent;
httpRequest.ContentType = sContentType;
httpRequest.Method = "POST";
#endregion

#region 填充要post的内容
httpRequest.ContentLength = data.Length;
Stream requestStream = httpRequest.GetRequestStream();
requestStream.Write(data, 0, data.Length);
requestStream.Close();
#endregion

#region 发送post请求到服务器并读取服务器返回信息
Stream responseStream;
try
{
responseStream = httpRequest.GetResponse().GetResponseStream();
}
catch(Exception e)
{
// log error
Console.WriteLine(
string.Format("POST操作发生异常:{0}", e.Message)
);
throw e;
}
#endregion

#region 读取服务器返回信息
string stringResponse = string.Empty;
using(StreamReader responseReader =
new StreamReader(responseStream, Encoding.GetEncoding(sResponseEncoding)))
{
stringResponse = responseReader.ReadToEnd();
}
responseStream.Close();
#endregion
return stringResponse;
支持(0) 反对(0) az235 | 园豆:8483 (大侠五级) | 2012-01-30 21:24

@az235: 哥们,你还是没理解我的意思啊。  我用抓包工具抓到了一条post记录,我要用代码实现模拟post,但是抓到的postdata是乱码, 这该怎么处理呢???

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-01-30 23:19

@Jamie_1019: 找个解码器,或者自己写个

支持(0) 反对(0) az235 | 园豆:8483 (大侠五级) | 2012-01-31 08:21

@az235: 问题就在这里,怎么解码???   乱码数据直接拷贝后赋给一个String?  貌似不能这么做吧?  之前尝试了几种解码方式都没成功

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-01-31 16:00
1

他是GZIP加压过的...从头中可以看到..你需要解压

56180825 | 园豆:1756 (小虾三级) | 2012-01-31 16:47

有实例代码不?

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-01-31 23:16

@Jamie_1019: 

GOOGLE一下GZIP解压很多的

支持(0) 反对(0) 56180825 | 园豆:1756 (小虾三级) | 2012-02-01 09:00

@56180825: 早就找过了,就像楼下 bb鸟  兄弟说的,怎么把抓取到的乱码数据应用到代码中呢,是postdata的数据哦,响应的数据有办法处理的。

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-02-01 13:20
0

解码编码,兄弟,

咆哮的野猪 | 园豆:60 (初学一级) | 2012-02-01 10:43
1

不用编解码。

你的需求就是说,模拟POST把数据发过去就行了,你管数据的具体内容是什么啊!

你就把抓到的乱码的二进制数据,封装到byte[]里面,直接发过去就OK!(不要直接拷到String里面,肯定不行。)

反正服务器端自己知道怎么解码就行。

bb鸟 | 园豆:205 (菜鸟二级) | 2012-02-01 12:04

哥们,说到关键点了,现在抓的postdata是乱码,怎么封装到byte[]里呢?  我用的Http Analyzer4 

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-02-01 13:17

@Jamie_1019: 这个工具我没用过,但应该也有方法能倒出来16进制数吧。

我一般用wireshake抓包,把Post里的content data对应的16进制数都复制出来。复制出来的样子如:“06990050070ad6561deaf7995010ffff0c8e0000”, 每2个数是一个字节。比如:第一个字节是06, 第二个为99

方法有好几种:

最简单的,你要不怕麻烦就是这么写 byte[] b = {(byte)0x06, (byte)0x99, (byte)0x00......}

稍微智能一点的,你就写个方法,把上面的16进制字符串,每2个一组,赋值给byte[].一劳永逸。:)

支持(0) 反对(0) bb鸟 | 园豆:205 (菜鸟二级) | 2012-02-01 16:44
0

提交的数据用HttpUtility.UrlDecode能否还原?如果有提交之前的页面? 就可以分析页面,得到应提交数据。

ChatinCode | 园豆:2272 (老鸟四级) | 2012-02-01 12:31

这个是解码URL的 ,完全两码事阿

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-02-01 13:18

@Jamie_1019: Content-Type: application/x-www-form-urlencoded, 难道不是意味着Post数据用UrlEncode处理过了?

支持(0) 反对(0) ChatinCode | 园豆:2272 (老鸟四级) | 2012-02-01 16:19

@ChatinCode: 呵呵  哥们,真的不是这样

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-02-01 20:26

@Jamie_1019: 我想这段数据很可能经过加密的。如果网上没有资料的话,很可能要逆向QQ的代码。如果你要的不是死的数据的话。不知道这个链接能不能有帮助。http://www.docin.com/p-8752035.html

支持(0) 反对(0) ChatinCode | 园豆:2272 (老鸟四级) | 2012-02-03 14:33
0

编码解码的问题吧

Rookier | 园豆:652 (小虾三级) | 2012-02-01 17:33

0D0A0D0A0A18083810CB87A028188320220A404138645A39514E4A32380110CB87A028

上面这段就是,不过是经过编码的,哪位高人能搞定呢?

支持(0) 反对(0) 冬菜 | 园豆:12 (初学一级) | 2012-04-26 21:52
0

一般是传过来的是用"ISO8859-1",而你可能是用别的编码查看的,所以乱码

String UTFFileName = new String(fileName.getBytes("ISO8859-1"), "UTF-8");

angelshelter | 园豆:9887 (大侠五级) | 2012-11-01 18:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册