none
HttpWebRequest 返回Error 500--Internal Server Error 怎么办 RRS feed

  • 问题

  •  CookieContainer cookies;
            HttpWebRequest wrq;
        
      public string GetEmsHtmlResult(string value, string verifycode)
            {
                try
                {   string postDataStr = "checkCode=" + verifycode + "&muMailNum" + HttpUtility.UrlEncode(value);
                    byte[] postBytes = Encoding.UTF8.GetBytes(postDataStr);
                    string address = "http://www.ems.com.cn/ems/order/multiQuery_t";
                    wrq = (HttpWebRequest)WebRequest.Create(address);
                    //wrq.Referer = "http://www.ems.com.cn/mailtracking/you_jian_cha_xun.html";
                    wrq.CookieContainer = cookies;//*发送COOKIE                
                    wrq.Method = "POST";
                    wrq.ContentLength = postBytes.Length;
                    //wrq.Headers.Add("Accept-Language", "zh-CN");
                    //wrq.Headers.Add("Accept-Encoding", "gzip, deflate"); 
                    wrq.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
                    wrq.ContentType = "application/x-www-form-urlencoded";
                    ////wrq.Timeout = 10000;
              
                    Stream postDataStream = wrq.GetRequestStream();
                    postDataStream.Write(postBytes, 0, postBytes.Length);
                    postDataStream.Close();
    
                    HttpWebResponse wr = (HttpWebResponse)wrq.GetResponse();
                    StreamReader sr = new StreamReader(wr.GetResponseStream());
                    string RespHtml = sr.ReadToEnd();
                    return RespHtml;
                }
      
                catch (WebException ex)
                {
                   HttpWebResponse wr = (HttpWebResponse)ex.Response;
                   StreamReader sr = new StreamReader(wr.GetResponseStream());
                   string RespHtml = sr.ReadToEnd();
                   return RespHtml;
                }
    
            }
    
    
    
    
    
            public void LoadCookie(String url)
            {
                try
                {
                    cookies = new CookieContainer();
                    wrq = (HttpWebRequest)WebRequest.Create(url);//请求的URL                
                    wrq.CookieContainer = cookies;//*发送COOKIE                
                    wrq.Method = "GET";
                    wrq.ContentType = "application/x-www-form-urlencoded";
                 
                    wrq.Timeout = 10000;                //获取返回资源                
                    HttpWebResponse response = (HttpWebResponse)wrq.GetResponse();                //获取流                
                    cookies.Add(response.Cookies);
                }
                catch(Exception er)
                {
                    throw er;
                }
            } 
    
    public Image GetVerificationCode(String url)
            {
                try
                {
                    wrq = (HttpWebRequest)WebRequest.Create(url);//请求的URL                
                    wrq.CookieContainer = cookies;//*发送COOKIE                
                    wrq.Method = "GET";
                    wrq.ContentType = "application/x-www-form-urlencoded";
                    wrq.Timeout = 10000;                //获取返回资源                
                    HttpWebResponse response = (HttpWebResponse)wrq.GetResponse();                //获取流      
                    cookies.Add(response.Cookies);
                    Image bitmapImage = Bitmap.FromStream(response.GetResponseStream()) as Bitmap;
                    return bitmapImage;
                }
                catch(Exception er)
                {
                    throw er;
                }
            
            }
    
    
    
    
    

    这是一个用HttpWebRequest模拟查询ems单号的不知道为什么返回的

    错误是
    Error 500--Internal Server Error 
    From RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1:
    10.5.1 500 Internal Server Error
    The server encountered an unexpected condition which prevented it from fulfilling the request.
     


    请高手指点!

    2013年5月29日 3:59

答案

  • 您好!谢谢您的回答!问题解决了是参数少了个=号 太不认真了!

       string postDataStr = "checkCode=" + verifycode + "&muMailNum" + HttpUtility.UrlEncode(value);
                    byte[] postBytes = Encoding.UTF8.GetBytes(postDataStr);

    由于技术能力不足!目前就想到这样的模拟方法去查询ems单号!请问您的方法是?

    2013年5月29日 14:07

全部回复

  • 用浏览器可以正常访问EMS网站!
    2013年5月29日 4:06
  • 你好,首先,請問你為什麼要WebRequest去EMS?

    另外,有好多原因而出現這IIS 500 錯誤的,可能你的WebRequest沒有給予足夠的資料,如header。
    也有可能它安裝了一些東西,防止了外部直接不用browser去訪問。

    如果你是有權去做EMS交流的Web開通,請聯絡EMS開發部門。


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    2013年5月29日 7:32
  • 你好,首先,請問你為什麼要WebRequest去EMS?

    另外,有好多原因而出現這IIS 500 錯誤的,可能你的WebRequest沒有給予足夠的資料,如header。
    也有可能它安裝了一些東西,防止了外部直接不用browser去訪問。

    如果你是有權去做EMS交流的Web開通,請聯絡EMS開發部門。


    大家一齊探討、學習和研究,謝謝!
    MCSD, MCAD, MCSE+I, MCDBA, MCDST, MCSA, MCTS, MCITP, MCPD,
    MCT, Microsoft Community Star(TW & HK),
    Microsoft MVP for VB.NET since 2003
    My MSMVP Blog

    您好!谢谢您的回答!问题解决了是参数少了个=号 太不认真了!

       string postDataStr = "checkCode=" + verifycode + "&muMailNum" + HttpUtility.UrlEncode(value);
                    byte[] postBytes = Encoding.UTF8.GetBytes(postDataStr);

    由于技术能力不足!目前就想到这样的模拟方法去查询ems单号!请问您的方法是?

    2013年5月29日 14:07
  • 您好!谢谢您的回答!问题解决了是参数少了个=号 太不认真了!

       string postDataStr = "checkCode=" + verifycode + "&muMailNum" + HttpUtility.UrlEncode(value);
                    byte[] postBytes = Encoding.UTF8.GetBytes(postDataStr);

    由于技术能力不足!目前就想到这样的模拟方法去查询ems单号!请问您的方法是?

    2013年5月29日 14:07