试了下,这个破站点在响应的时候用gzip压缩过了,但尼玛响应头里面又不包含gzip。
你在这句下面Stream myResponseStream = response.GetResponseStream();
再加一句
using (var gStream = new GZipStream(myResponseStream, CompressionMode.Decompress))
{
StreamReader myStreamReader = new StreamReader(gStream, Encoding.UTF8);
....
}
就可以了.
对头,这个破站点在响应的时候用gzip压缩过了,我搜到时java的,尼玛,不会用啊
http://www.cnblogs.com/hotlove/p/5435324.html
http://blog.csdn.net/sugar_tea/article/details/45224109
@mr_hj: 你把我上面的代码加到你里面去就可以了。理论上是否启用压缩是客户端决定的,应该是你发个请求告诉服务端,我这边可以接受哪些压缩方式,服务端如果支持你请求中的压缩方式才会进行压缩,压缩后再在响应中告知客户端我用什么方式压缩了,你那边再用对应方式解压。
不过不排除这是最前面的负载均衡没配好,把后端的响应头给去掉了。
@Daniel Cai: 谢谢
还没解决???
是啊
头都大了
@mr_hj: 这还是缺基础知识。。。
@顾晓北: 对头,有些东西都忘完了
@mr_hj: ps下,你那个帖子中的方法UrlUtf_8这个就是HttpUtility.UrlEncode(string,Encoding)
@Daniel Cai: PS:谢谢
@Daniel Cai: PS:如果HttpUtility.UrlEncode()中是完整的URL地址,编码出来会有错误,最好只编码参数
@mr_hj: 这个本来就是对url参数做encode的,你对整个url做编码的话那就是期望整个url作为参数了。
比如http://xxx.com/?redirecturl=(your redirect url as paramter)
@Daniel Cai: -_-! ,我好想多此一举了,谢谢你了,有问题我再问你
@Daniel Cai: 解决了,但是post方式的该怎么改!!
@mr_hj: 你post又有什么问题?
@Daniel Cai: 我是这样写的,parameters集合是<参数名, 参数编码过的值>
public string PostFunction(string url, Dictionary<string, string> parameters) { string serviceAddress = url; //HttpWebRequest类继承于WebRequest,并没有自己的构造函数,需通过WebRequest的Creat方法 建立,并进行强制的类型转换 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "application/json"; request.Method = "POST"; using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream())) { dataStream.Write(parameters); dataStream.Close(); } HttpWebResponse response = (HttpWebResponse)request.GetResponse(); string encoding = response.ContentEncoding; if (encoding == null || encoding.Length < 1) { encoding = "UTF-8"; //默认编码 } //解析josn Stream myResponseStream = response.GetResponseStream(); using (var gStream = new GZipStream(myResponseStream, CompressionMode.Decompress)) { //Encoding.GetEncoding("UTF-8")转码 StreamReader myStreamReader = new StreamReader(gStream, Encoding.GetEncoding("UTF-8")); string retString = myStreamReader.ReadToEnd(); JObject jo = JObject.Parse(retString); myStreamReader.Close(); response.Close(); myResponseStream.Close(); return retString; } }
@mr_hj: 你传递的实参是什么?
@Daniel Cai: 比如url=http://wthrcdn.etouch.cn/weather_mini?
parameters={city,%E5%8C%97%E4%BA%AC}
@mr_hj: 你这个post写错了。dataStream.Write(parameters);
这个不是直接把dictionary写到输出里面,你要把dictionary中的keyvaluepair拉出来拼成{key}={value}的格式,中间以&符号隔开。
然后用你期望的encoding,比如你这边是utf-8获取这个字符串的byte数组,数组的长度就是你request的contentlength(没这个服务端怎么知道你要发多少数据过来?),然后将这个byte数组通过dataStream.Write方法进行输出