zoukankan      html  css  js  c++  java
  • HttpWebResponse远程服务器返回错误: (500) 内部服务器错误。

    现象

    我们编码实现请求一个页面时,请求的代码类似如下代码:

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);
    req.UserAgent = "MSIE6.0";
    req.Method = "GET";
    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    StreamReader sr = new StreamReader(res.GetResponseStream(), strEncode);
    strHtml = sr.ReadToEnd();
    sr.Close();
    res.Close();

    但是,如果我们请求的这个页面正好是一个有异常发生的页面,或者不存在的页面。我们上面的代码就会在

    req.GetResponse();

    这里抛出异常:远程服务器返回错误: (500) 内部服务器错误。

    我们通过上面的代码,是不能得到错误发生时候的页面源代码的。

    分析原因:

    (HttpWebResponse)req.GetResponse(); 这行代码中做了如下一件事情:

    当服务器段ASP.net程序有 Exception 发生时,客户端应用程序接受了HTTP 协议错误后。把这个HTTP 协议错误转换成 Status 设置为 WebExceptionStatus.ProtocolError 的 WebException,并且把这个异常throw出来。

    解决问题

    那如果我们想获得错误发生时候服务器段错误页面的源代码该如何做呢?

    其实非常非常简单的做法,我们用下面的代码就不论错误发生与否,都可以获得服务器段页面的源代码。

     HttpWebResponse res;
    try
    {
    res = (HttpWebResponse)req.GetResponse();
    }
    catch (WebException ex)
    {
    res = (HttpWebResponse)ex.Response;
    }
    StreamReader sr = new StreamReader(res.GetResponseStream(), strEncode);
    strHtml = sr.ReadToEnd();
    当异常发生事后,WebException 中不仅有 StatusCode 标志着 HTTP 的错误代码,而且它的 Response 属性还包含由服务器发送的 WebResponse,
    来指示遇到的实际 HTTP 错误。
  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/soundcode/p/10015679.html
Copyright © 2011-2022 走看看