WebRequest设置代理
企业上网一般都是通过网关服务器,部分非自动的代理服务器需要手工设置(就像IE需要在连接-局域网设置-代理器中的那样),前段为企业开发了一个需要远程访问HTTP服务器的应用,发现在手动代理的网络环境下,会在运行时WebRequest试图通过GetResponse获取Response对象时抛出:error: 远程服务器返回错误: (407) 需要代理身份验证。 的错误,其实就是因为网络代理服务器验证失败被拒绝的缘故。
前段碰到这个问题,苦于自己没有这样的网络环境,最近正好在客户单位干活,就是用了代理服务器,所以就花了一会儿时间搞出来了,其实很简单:
1.获取IE当前缺省的代理服务器信息(物理上其实存储在HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/的ProxyEnable和ProxyServer),地址和端口号可以获取,但用户名和密码还是必须通过设置来获取
2.设置WebRequest的Proxy属性,绑定到有效的Proxy对象
我自己封装了一个方法,无论是直接连接还是通过代理服务器都可以自适应:
public static void ProxySetting(WebRequest request)
{
WebProxy proxy = WebProxy.GetDefaultProxy();//获取IE缺省设置
//如果缺省设置为空,则有可能是根本不需要代理服务器,如果此时配置文件中也未配置则认为不需Proxy
if (proxy.Address == null && Sys.ProxyAddress != null && Sys.ProxyAddress != "")
proxy.Address = new Uri(Sys.ProxyAddress);//按配置文件创建Proxy 地置
if (proxy.Address != null)//如果地址为空,则不需要代理服务器
{
proxy.Credentials = new NetworkCredential(Sys.ProxyUser, Sys.ProxyKey);//从配置封装参数中创建
request.Proxy = proxy;//赋予 request.Proxy
}
}
调用:
request = (HttpWebRequest)WebRequest.Create(http://abc.com/def.xml);
ProxySetting(request);//加在获取响应前
request.GetResponse();
配置文件可能如下,读回后被Sys封装:
<add key="ProxyAddress" value="" />
<add key="ProxyUser" value="msuser" />
<add key="ProxyKey" value="hello" />
OK了,现在你的程序就可以穿透设有代理服务器的局域网了
另外,如果需要用到类似XmlDocument直接加载远程XML文件的时间也会出现这样的问题,解决办法也很简单,多写一个方法改用WebRequest获取远程XML,再将Load方法改为LoadXml的装入String就可以了,如下:
public static XmlDocument loadXMLDocument(string FileNameOrUrl)
{
XmlDocument doc = null;
try
{
doc = new XmlDocument();
// doc.Load( FileNameOrUrl);
doc.LoadXml(GetWeb(FileNameOrUrl));//改为由WebRequest取回后载入XMLString
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
Pub.logError(e);
doc = null;
}
return doc;
}
public static string GetWeb(string Url)
{
HttpWebRequest request ;
HttpWebResponse response=null;
StreamReader htmlStream =null;
Stream stream=null;
string html="";
int i=0;
do
{
request=(HttpWebRequest )WebRequest.Create(Url);
ProxySetting(request);//检查代理设置
try
{
response = (HttpWebResponse)request.GetResponse();
break;
}
catch
{
request=null;
}
}
while(i++ <3);
if (response==null) return "";
if (request.HaveResponse)
{
try
{
stream = response.GetResponseStream();
htmlStream = new StreamReader(stream,System.Text.Encoding.Default,true);
html=htmlStream.ReadToEnd();
}
catch
{}
finally
{
response.Close();
htmlStream.Close();
stream.Close();
}
}
return html;
}
WebRequest设置代理相关推荐
- HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理...
原文地址:http://blog.csdn.net/cdefg198/article/details/8315438 万能框架:http://www.sufeinet.com/forum.php?mo ...
- C# 使用GET和POST(v1签名方式)以及SDK的方式调用腾讯云人像动漫化接口,包含设置代理
声明:此内容仅供学习交流使用,不用于商业用途,如果涉及侵权,联系作者删除. 最近在调用腾讯云的人像动漫化接口,感觉挺好玩的,自己去看文档写了一下,遇到了各种问题,最后都解决了 ,遇到最多的就是签名错误 ...
- devServer proxy跨域 设置代理 proxy
概念 什么是同源策略 同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一 ...
- linux 设置代理 安装jdk mysql tomcat redis hadoop
1.修改linux用户名和密码 前提进入root用户 原用户名 XX,改成用户名 YY 执行 usermod -l YY XX 修改用户 YY 的密码,如果你在root权限下 ...
- 用iframe设置代理解决ajax跨域请求问题
用iframe设置代理解决ajax跨域请求问题 参考文章: (1)用iframe设置代理解决ajax跨域请求问题 (2)https://www.cnblogs.com/ranzige/p/370965 ...
- Linux中为wget命令设置代理
方法1:使用命令参数-e wget本身没有专门设置代理的命令行参数,但是有一个"-e"参数,可以在命令行上指定一个原本出现在".wgetrc"中的设置.于是可以 ...
- DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网...
我自己的命令: server端: dns2tcpd -F -d 1 -f ./dns2tcpd.conf 输出: 09:08:59 : Debug options.c:97 Add resource ...
- npm获取配置,设置代理
npm获取配置有6种方式,优先级由高到底. 命令行参数. --proxy http://server:port即将proxy的值设为http://server:port. 环境变量. 以npm_con ...
- linux下设置代理
由于我们实验室有自己的代理.所以想用代理,省些money.于是就开始学习怎么设置代理. 先是在网上搜了好些方法.但是怎么都成功不了.最后成功了以后,才发现,原来是网上提供的命令行的大小写有误,而且还少 ...
最新文章
- PowerDesigner12.5 下载、汉化及破解
- HoloLens开发入门
- javascript获取表单值的7种方式
- 十一假期朋友圈鄙视链,你在第几层?
- Raid技术精简总结
- 计算机不觉晓,人工智能知多少
- linux登录显示 Error in service module错误
- vcpkg编译库位数总结
- react获取鼠标位置_JavaScript 获取鼠标点击位置坐标
- Spell Checker
- PHP实现输入地址,获取当前位置的经纬度,$lng和$lat即为经纬度的返回值
- matlab求解常微分方程组——dsolve与ode45
- js实现60秒倒计时
- 跨考计算机 经验,跨考计算机成功的“重要”经验_跨考网
- 我的世界服务器如何修改天气,我的世界怎么切换天气 原来这么简单
- 移动端名片识别SDK
- 计算机应用 期刊 怎么样,《计算机应用研究》怎么样?投稿好中吗?
- PDF编辑/PDF浏览/PDF打印:PDFPrinting.NET Crack
- 微信公众号事件推送(点击推送图文)
- 冷启动、微创新、产品思维,一家AI公司孵化输入法的跋涉之路
热门文章
- PLC滑动平均值滤波(SMART 200梯形图篇)
- 1688商品详情api接口
- 降维算法总结(超全!附代码)
- C语言初阶-C语言中static的用法
- Unity中的万向节死锁
- 关于STM32内部温度传感器的算式话题
- Hive表分区查询show partitions tablename
- data.length提示undefined
- 【Linux】WARNING: The script locust is installed in ‘/home/xxx/bin‘ which is not on PATH.
- 【网络】OSI七层模型