兄弟进行编码.
自己整理好不就完了吗?
问题在于,这是从一个网页上抓取的,怎么编码? 拷贝那段乱码数据赋值给一个string ??? 如果只是响应的数据的话倒是可以尝试下各种编码,问题是提交的数据也是乱码,这咋处理,希望我表达的清楚了。
请问下是用什么模拟的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将数据进行编码,然后在服务器端进行解码。
这段是抓取的网页的提交,不是模拟的,所以不知道该怎么处理
@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;
@az235: 哥们,你还是没理解我的意思啊。 我用抓包工具抓到了一条post记录,我要用代码实现模拟post,但是抓到的postdata是乱码, 这该怎么处理呢???
@Jamie_1019: 找个解码器,或者自己写个
@az235: 问题就在这里,怎么解码??? 乱码数据直接拷贝后赋给一个String? 貌似不能这么做吧? 之前尝试了几种解码方式都没成功
他是GZIP加压过的...从头中可以看到..你需要解压
有实例代码不?
@Jamie_1019:
GOOGLE一下GZIP解压很多的
@56180825: 早就找过了,就像楼下 bb鸟 兄弟说的,怎么把抓取到的乱码数据应用到代码中呢,是postdata的数据哦,响应的数据有办法处理的。
解码编码,兄弟,
不用编解码。
你的需求就是说,模拟POST把数据发过去就行了,你管数据的具体内容是什么啊!
你就把抓到的乱码的二进制数据,封装到byte[]里面,直接发过去就OK!(不要直接拷到String里面,肯定不行。)
反正服务器端自己知道怎么解码就行。
哥们,说到关键点了,现在抓的postdata是乱码,怎么封装到byte[]里呢? 我用的Http Analyzer4
@Jamie_1019: 这个工具我没用过,但应该也有方法能倒出来16进制数吧。
我一般用wireshake抓包,把Post里的content data对应的16进制数都复制出来。复制出来的样子如:“06990050070ad6561deaf7995010ffff0c8e0000”, 每2个数是一个字节。比如:第一个字节是06, 第二个为99
方法有好几种:
最简单的,你要不怕麻烦就是这么写 byte[] b = {(byte)0x06, (byte)0x99, (byte)0x00......}
稍微智能一点的,你就写个方法,把上面的16进制字符串,每2个一组,赋值给byte[].一劳永逸。:)
提交的数据用HttpUtility.UrlDecode能否还原?如果有提交之前的页面? 就可以分析页面,得到应提交数据。
这个是解码URL的 ,完全两码事阿
@Jamie_1019: Content-Type: application/x-www-form-urlencoded, 难道不是意味着Post数据用UrlEncode处理过了?
@ChatinCode: 呵呵 哥们,真的不是这样
@Jamie_1019: 我想这段数据很可能经过加密的。如果网上没有资料的话,很可能要逆向QQ的代码。如果你要的不是死的数据的话。不知道这个链接能不能有帮助。http://www.docin.com/p-8752035.html
编码解码的问题吧
0D0A0D0A0A18083810CB87A028188320220A404138645A39514E4A32380110CB87A028
上面这段就是,不过是经过编码的,哪位高人能搞定呢?
一般是传过来的是用"ISO8859-1",而你可能是用别的编码查看的,所以乱码
String UTFFileName = new String(fileName.getBytes("ISO8859-1"), "UTF-8");