当前位置: 首页 > news >正文

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

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

https://blog.csdn.net/weixin_33811539/article/details/86015641

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

 

 

 

 

相关文章:

  • 【转载】HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法
  • UE4 AIController
  • [UE4]创建自定义AIController的方法(C++)
  • eclipse + pydev远程调试OpenStack
  • 调用shell jenkins不能自动结束
  • Unreal 第三方 Python平台
  • 【UE4_C++】<14-3>用户界面 UI和UMG——为UI创建屏幕尺寸自适应缩放
  • 虚幻4DPI自适应缩放规则解析
  • Eclipse中打开windows资源管理器或打开文件夹的设置!(实例)
  • 在Eclipse中快速定位当前文件所在位置
  • AssetBundle详解与优化
  • 苹果电脑远程管理/屏幕共享的客方设置
  • 使用UnrealPak.exe创建Pak文件
  • 正确配置 Visual Studio Code 开发和调试 TypeScript
  • Typescript 基本数据类型(boolean、number、string、any、联合)
  • JavaScript-如何实现克隆(clone)函数
  • [译]前端离线指南(上)
  • 78. Subsets
  • Angularjs之国际化
  • css的样式优先级
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Less 日常用法
  • Vue2 SSR 的优化之旅
  • 给Prometheus造假数据的方法
  • 关于Java中分层中遇到的一些问题
  • 后端_ThinkPHP5
  • 使用权重正则化较少模型过拟合
  • 小程序 setData 学问多
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ()、[]、{}、(())、[[]]命令替换
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (8)STL算法之替换
  • (arch)linux 转换文件编码格式
  • (C语言)字符分类函数
  • (pojstep1.3.1)1017(构造法模拟)
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (一)WLAN定义和基本架构转
  • (一一四)第九章编程练习
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .equals()到底是什么意思?
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET建议使用的大小写命名原则
  • .net中生成excel后调整宽度
  • .sh
  • .skip() 和 .only() 的使用
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @JoinTable会自动删除关联表的数据