想在系统里直接进行顺丰快递单查询,已下是我写的方法,可是怎么都不成功,看哪位高人可以指点下。
我的设想是分2个网页,一个是前端UI查询页,一个是后台异步处理页负责获取验证码跟模拟Post表单。前端:test.aspx
<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>test</title>
    <script src="inc/jquery-1.2.6.min.js" type="text/javascript"></script>
    <script language = "javascript">
        $(document).ready(function(){
            $("#submit").click(function(){
               if($("#vcode").val()=="")
               {
                    alert("请输入验证码");
                    return;
               }
                $.ajax({
                    type:"get",
                    url:"KuaiDi.ashx?NoCopyRight=1",
                    data:"action=shunfeng&order="+$("#order").val()+"&code="+$("#vcode").val(),
                    cache:false,
                    success:function(msg){
            $("#result").append(msg);
                    },//end seccess
                    error:function(XMLHttpRequest,textStatus){if(textStatus=='parsererror'){alert('Get Para error')}else{alert('error_GetPara')};}
                });//end ajax
            });
        });
    </script>
</head>
<body>
    订单号:<input type="text" id="order" /><span id="code"><img src="KuaiDi.ashx?NoCopyright=1&type=shunfeng" /></span>
    <input type="text" id="vcode" />
    <input type="button" id="submit" value="提交" />
    <div id="result"></div>
</body>
</html>
异步处理页:kuaidi.ashx.cs public class KuaiDi : IHttpHandler
    {        public CookieContainer _cookieCon = new CookieContainer();
        public string cookieHeader = "";
        public void ProcessRequest(HttpContext context)
        {
            string type = context.Request.Params["type"] == null ? "" : context.Request.Params["type"];
            string action = context.Request.Params["action"] == null ? "" : context.Request.Params["action"];
            string order = context.Request.Params["order"] == null ? "" : context.Request.Params["order"];
            string code = context.Request.Params["code"] == null ? "" : context.Request.Params["code"];
            
            if (action != "" && order != "")
            {
                string result = "";
                switch (action)
                {
                    case "shunfeng":
                        result = GetShunFeng(order, code);
                        break;
                    default:
                        break;
                }
                context.Response.Write(result);
            }
            else if(type != "")
            {
                switch (type)
                {
                    case "shunfeng":
                        GetCode("http://kf.sf-express.com/css/loginmgmt/imgcode");
                        break;
                    default:
                        break;
                }
            }
            
        }        private string GetShunFeng(string order,string code)
        {
            string result = string.Empty;
            string param = "waybills=" + order + "&verifycode=" + code;
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://kf.sf-express.com/css/myquery/queryBill.action");
            request.Method = "POST"; 
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = param.Length;
            HttpWebResponse response = null;            try
            {
                CookieContainer myCookieContainer = new CookieContainer();
                string ccookie = "__utma=265537869.28284888.1281249637.1281249637.1281249637.1; __utmz=265537869.1281249637.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); JSESSIONID=BB105A54DDB2F55D478F3780D878B628.css1";
                myCookieContainer.SetCookies(request.RequestUri, ccookie);
                request.CookieContainer = myCookieContainer;
                StreamWriter swRequestWriter = new StreamWriter(request.GetRequestStream());
                swRequestWriter.Write(param);
                if (swRequestWriter != null)
                {
                    swRequestWriter.Close();
                }
                response = (HttpWebResponse)request.GetResponse();
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    result = reader.ReadToEnd();
                    
                }
                return result;
            }
            catch
            {
                return "快件跟踪失败";
            }
            finally
            {
                if (response != null)
                    response.Close();
            }
        }        /// <summary> 
        /// 验证码
        /// </summary> 
        /// <param name="strURL">验证码地址</param> 
        /// <returns></returns> 
        public void GetCode(string strURL)
        {
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(strURL);
            myHttpWebRequest.Method = "GET";
            myHttpWebRequest.KeepAlive = true;
            string ccookie = "__utma=265537869.28284888.1281249637.1281249637.1281249637.1; __utmz=265537869.1281249637.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); JSESSIONID=BB105A54DDB2F55D478F3780D878B628.css1";
            myHttpWebRequest.CookieContainer = _cookieCon;
            _cookieCon.SetCookies(myHttpWebRequest.RequestUri, ccookie);
            using (HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.GetResponse())
            {
                System.Drawing.Image code = System.Drawing.Image.FromStream(response.GetResponseStream(), false, false);
                MemoryStream ms = new MemoryStream();
                code.Save(ms, ImageFormat.Jpeg);
                HttpContext.Current.Response.ClearContent();
                HttpContext.Current.Response.ContentType = "image/Jpeg";
                HttpContext.Current.Response.BinaryWrite(ms.ToArray());
                ms.Dispose();
                code.Dispose();
            }
        }        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }