根据网络上的实例,能够做一个简单的但是面对复杂的却一直不能成功        public String GetPostHttp()
        {
            string srcString="chucuo";            // 提交按钮的文本
            string submitButton = "登录";
            // 页面的 VeiwState(可以通过IE打开页面,右键“查看源文件”取得)
            string viewState = "/wEPDwULLTEwMDUyNjYzMjhkZA==";
            // 页面的 EventValidation(可以通过IE打开页面,右键“查看源文件”取得)
            //string eventValidation = "/wEWBAK3xNW/DgKfyLs/Arnisr4CAumSxcAMOcITkYMHoeMuHNAexLkgIUS6ilo=";            submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
            viewState = System.Web.HttpUtility.UrlEncode(viewState);
            //eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
            String hc = "北京";
            String dc = "上海";
            String dc2 = "深圳";
            hc = System.Web.HttpUtility.UrlEncode(hc);
            dc = System.Web.HttpUtility.UrlEncode(dc);
            dc2 = System.Web.HttpUtility.UrlEncode(dc2);
            
            try
            {
                // 要提交表单的URI字符串。
                //string uriString = "http://flights.ctrip.com/Domestic/ShowFareFirst.aspx";
                string uriString = "http://flights.ctrip.com/Domestic/ShowFareFirst.aspx";
                // 要提交的字符串数据。格式形如:user=uesr1&password=123
                string postString = "flight_type=M&bunk_grade=Y&FlightWay=M&HomeCity="+ hc +"&DestCity1="+ dc +"&DestCity2="+ dc2 +"&TicketAgency_List="+ hc +"&DDatePeriod1=2008-4-21&startPeriod=All&ADatePeriod1=2008-4-21&startPeriod2=All&ChildType=ADU&airlineChoice=All&DSeatClass=Y&Quantity=1&NOVIEWSTATE=" + viewState;
                // 初始化WebClient
                WebClient webClient = new WebClient();
                webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                // 将字符串转换成字节数组
                byte[] postData = Encoding.Default.GetBytes(postString);
                // 上传数据,返回页面的字节数组
                //byte[] buff = webclient.DownloadData(url);
                //string cookie = webclient.ResponseHeaders.Get("Set-Cookie");
                byte[] responseData = webClient.UploadData(uriString, "POST", postData);
                // 将返回的将字节数组转换成字符串(HTML);
                // ASP.NET 返回的页面一般是Unicode,如果是简体中文应使用 
                // Encoding.GetEncoding("GB2312").GetString(responseData)
                srcString = Encoding.Default.GetString(responseData);
            }
            catch (WebException we)
            {
                string msg = we.Message;
            }
            return srcString;        }
请高手指点下如何能够成功的Post 这个页面http://flights.ctrip.com/Domestic/SearchFlights.aspx

解决方案 »

  1.   

    搞这个很麻烦的,需要分析数据
    第一步应该请求用Get,HttpRequest类,请求页面
    使用HttpResponse类,获取你要post的数据,
    第二步,post,同样使用那两个类,
    关键是要分析数据post的内容,格式,等
      

  2.   

    ……麻烦也要搞啊……这个步骤我已经会了
    POST /Domestic/ShowFareFirst.aspx HTTP/1.1
    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
    Referer: http://flights.ctrip.com/Domestic/SearchFlights.aspx
    Accept-Language: zh-cn
    Content-Type: application/x-www-form-urlencoded
    UA-CPU: x86
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
    Host: flights.ctrip.com
    Content-Length: 298
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: __utma=167964915.382392779.1208746167.1208830385.1208831162.7; __utmz=167964915.1208746167.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ALLYESID4=00080421104928890347; Customer=HAC=5&HAL=zh%2Dcn; __utmb=167964915.17.10.1208831161968; __utmc=167964915; ASPSESSIONIDCASDASAA=MBFJLPPBKNOIGGOFKNHELIJNNOVIEWSTATE=%2FwEPDwULLTEwMDUyNjYzMjhkZA%3D%3D&flight_type=D&bunk_grade=Y&FlightWay=S&HomeCity=%B1%B1%BE%A9&DestCity1=%C9%CF%BA%A3&DestCity2=&TicketAgency_List=%B1%B1%BE%A9&DDatePeriod1=2008-4-22&startPeriod=All&ADatePeriod1=&startPeriod2=All&ChildType=ADU&airlineChoice=All&DSeatClass=Y&Quantity=1HTTP/1.1 200 OK
    Date: Tue, 22 Apr 2008 02:50:12 GMT
    Server: Microsoft-IIS/6.0
    X-Powered-By: ASP.NET
    X-AspNet-Version: 2.0.50727
    Cache-Control: private
    Content-Type: text/html; charset=gb2312
    Content-Length: 82505GET /styles/common/private_header_print.css HTTP/1.1
    Accept: */*
    Referer: http://flights.ctrip.com/Domestic/ShowFareFirst.aspx
    Accept-Language: zh-cn
    UA-CPU: x86
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
    Host: webresource.ctrip.com
    Connection: Keep-Alive
    Cookie: __utma=167964915.382392779.1208746167.1208830385.1208831162.7; __utmz=167964915.1208746167.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ALLYESID4=00080421104928890347; Customer=HAC=5&HAL=zh%2Dcn; __utmb=167964915.17.10.1208831161968; __utmc=167964915
    或者能不能帮我分析一下这个获取的信息
      

  3.   

    NOVIEWSTATE=%2FwEPDwULLTEwMDUyNjYzMjhkZA%3D3D
    flight_type=D
    bunk_grade=Y
    FlightWay=S
    HomeCity=%B1%B1%BE%A9
    DestCity1=%C9%CF%BA%A3
    DestCity2=
    TicketAgency_List=%B1%B1%BE%A9
    DDatePeriod1=2008-4-22
    startPeriod=All
    ADatePeriod1=
    startPeriod2=All
    ChildType=ADU
    airlineChoice=All
    DSeatClass=Y
    Quantity=1
    这个是需要post的数据,顺序不要乱了 
    注意的是,这个有Cookies需要把它也获取然后加进去
      

  4.   

    cookies的内容应该会自动Post回去吧
    难道要自己手动添加到Post数据尾部?
    学习一下
      

  5.   

    即使是这样也不行啊,是不是Cookies的问题没有弄好教我弄一下好不好?还可以加分的
      

  6.   

    Cookies是在第一次获取网页时获取的
    req 是HttpRequest对象
    req.CookieContainer = ccc;
    此时CCC是一个空的Cookies容器
    获取后添加到Cookies容器里,
    res.Cookies = ccc.GetCookies(req.RequestUri);
    以后就用这个容器就可以了