• System.Net.HttpWebRequest.GetResponse() 远程服务器


    WebException 服务器状态码错误,比如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 错误。

     --发现文件可以下载,但是发现下载后的文件没有内容

    在下面加上红色这句:


    HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(url);//?act=writePayInfo&payphone=" + num
            Request.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)";
            WebResponse Response = Request.GetResponse();

    --文件可下载,且可以打开

    参考:https://blog.csdn.net/atceedsun/article/details/44855799

               https://blog.csdn.net/rrzhaobaojun/article/details/25769581

  • 相关阅读:
    ruby 二进制转十进制 Integer("0b101") = 5
    开始菜单和我的文档的我的图片及我的音乐变成 my pictrues 正常图标了
    ruby watir 莫名其妙的错误
    Excel SaveAS是去掉提示框
    apache && jboss安装
    ruby require include的区别
    ruby控制鼠标
    This error is raised because the column 'type' is reserved for storing the class in case of inheritance
    用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
    ASP.NET 如何动态修改 Header 属性如添加 Meta 标签 keywords description!
  • 原文地址:https://www.cnblogs.com/wangfuyou/p/9647535.html
Copyright © 2020-2023  润新知