当前位置:编程学习 > C#/ASP.NET >>

真没分了,但你进来你会兴奋的,试好乐美代金卷的代码

Header
Request URL:http://www.okbuy.com/card/findByCardCode/
Request Method:POST
Status Code:200 OK
Request Headers
Request Headersview parsed
POST /card/findByCardCode/ HTTP/1.1

Host: www.okbuy.com

Connection: keep-alive

Content-Length: 18

Origin: http://www.okbuy.com

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2

Content-Type: application/x-www-form-urlencoded

Accept: application/json, text/javascript, */*

Referer: http://www.okbuy.com/order/form

Accept-Encoding: gzip,deflate,sdch

Accept-Language: zh-CN,zh;q=0.8

Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3

Cookie: OK_SES=1340633343990_27006517; _jzqy=1.1340633345.1340633345.1.jzqsr=baidu|jzqct=%BA%C3%C0%D6%C2%F2.-; usernameoremail=tianhe1006@126.com; obuid=133892; obtime=1344517163; _jzqa=1.3799599200967736000.1340633345.1340633345.1344517149.2; _jzqc=1; cookcoms=16974471%2C16962701%2C; __utma=26579491.349417223.1340633345.1344517148.1344520070.3; __utmc=26579491; __utmz=26579491.1340633345.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic|utmctr=%BA%C3%C0%D6%C2%F2; obsid=55tmfjtse610llcopu9o3o33r2
Form Dataview URL encoded
from Data
cardcode:z5c26a23f
Reponse Header
Response Headersview parsed
HTTP/1.1 200 OK

Server: nginx/1.0.15

Content-Type: application/json; charset=utf-8

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Content-Encoding: gzip

Vary: Accept-Encoding

Content-Length: 86

Accept-Ranges: bytes

Date: Thu, 09 Aug 2012 15:47:56 GMT

Age: 0

Connection: keep-alive

Via: okbuy





  public void FabricateCookieContainer()
        {
            string compagesstr = "cardcode:z3c26b82f";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.okbuy.com/card/findByCardCode/");
            request.Method = "Post";
            request.Headers[HttpRequestHeader.Cookie] = " OK_SES=1340633343990_27006517; _jzqy=1.1340633345.1340633345.1.jzqsr=baidu|jzqct=%BA%C3%C0%D6%C2%F2.-; usernameoremail=tianhe1006@126.com; obuid=133892; obtime=1344517163; _jzqa=1.3799599200967736000.1340633345.1340633345.1344517149.2; _jzqc=1; cookcoms=16974471%2C16962701%2C; __utma=26579491.349417223.1340633345.1344517148.1344520070.3; __utmc=26579491; __utmz=26579491.1340633345.1.1.utmcsr=baidu|utmccn=(organic)|utmcmd=organic|utmctr=%BA%C3%C0%D6%C2%F2; obsid=55tmfjtse610llcopu9o3o33r2";
            request.Accept = "application/json, text/javascript, */*";
            request.Headers[HttpRequestHeader.AcceptCharset] = "GBK,utf-8;q=0.7,*;q=0.3";
            request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip,deflate,sdch";
            request.Headers[HttpRequestHeader.AcceptLanguage] = "zh-CN,zh;q=0.8";
            SetHeaderValue(request.Headers, "Connection", "Keep-Alive");
            request.ContentType = "application/x-www-form-urlencoded";
            SetHeaderValue(request.Headers, HttpRequestHeader.Host.ToString(), "www.okbuy.com");
            //Origin:http://www.okbuy.com
            request.Referer = "http://www.okbuy.com/order/form";
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2";
            //X-Requested-With:XMLHttpRequest

            Encoding encoding = Encoding.Default;
            byte[] bytesToPost = encoding.GetBytes(compagesstr);
            MemoryStream memoryStream = new MemoryStream();

            GZipStream gzipStram = new GZipStream(memoryStream, CompressionMode.Compress, true);
            gzipStram.Write(bytesToPost, 0, bytesToPost.Length);
            gzipStram.Close();

            byte[] mypostdata = memoryStream.ToArray();

            request.ContentLength = mypostdata.Length;
            System.IO.Stream requestStream = request.GetRequestStream();
            requestStream.Write(mypostdata, 0, mypostdata.Length);
            requestStream.Close();

            WebResponse response = request.GetResponse();
            GZipStream responseStream = new GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
            StreamReader streamReader = new StreamReader(responseStream, encoding);
            string currentInfo = streamReader.ReadToEnd();

            if (response.ContentLength != 137)
            {
 
            }
            //u5bf9\u4e0d\u8d77\uff0c\u60a8\u7684\u4ee3\u91d1\u5238\u53f7\u7801\u4e0d\u5b58\u5728


        }
--------------------编程问答-------------------- 截图是一次正确 代金卷请求,返回的结果为

错误的会返回


--------------------编程问答-------------------- 代码还存在如下问题:他得POST 编码是gzip(Accept-Encoding:gzip,deflate,sdch)
 request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip,deflate,sdch";

但是看它的内容大小又是18,如果不对 cardcode:z3c26b82f 这串字符进行 GZipStream 编码,大小刚好是18
如果对其压缩,压缩后会有一些特定的头,byte[] 数组大小为137。

我不是很明白 他发送出去POST 数据是否压缩过,我压缩和不压缩这种方式都试了,依然返回结果是报该代金卷不存在


--------------------编程问答--------------------

public  void SetHeaderValue(WebHeaderCollection header, string name, string value)
        {
            var property = typeof(WebHeaderCollection).GetProperty("InnerCollection",
                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            if (property != null)
            {
                var collection = property.GetValue(header, null) as NameValueCollection;
                collection[name] = value;
            }
        }


反射那段方法发掉了 --------------------编程问答--------------------
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,