全国统一热线:
028-86758058
18980748058
购买流程
付款方式
常见问题
在线提问
续租服务
购物车(
0
件)
用户名:
密 码:
记住
首 页
HOME
域名注册
DOMAIN
虚拟主机
WEB HOST
成品网站超市
AUTO Site
VPS主机
VPS SERVER
云 主 机
CLOUD HOST
租用托管
SERVER
海外主机
HK HOST
代理专区
AGENT
客服中心
SERVICE
站长教程
SERVICE
欢迎光临西部数据云计算中心,我们将竭诚为您提供最优质的服务!
中文域名
域名转入
域名转出
DNS管理
动态域名
获取域名证书
域名停放
域名过户
集群主机
双线主机
基本主机
港台主机
论坛主机
Linux主机
Vip合租主机
超G型主机
ASP.net主机
Java主机
智能建站主机
网店主机
美国主机
数据库
成品网站超市
智能建站主机
集群VPS主机
国内VPS主机
香港VPS主机
美国VPS主机
云主机介绍
云主机购买
服务器租用
主机托管
常见问题
香港主机
港台主机
美国主机
国内免备案
步骤流程
代理级别
代理合同
代理模式
代理优势
在线申请
产品列表
常见问题
代理商分布图
常见问题
有问必答
跟踪提问
购买流程
产品价格
付款方式
常用软件
网站备案
续租服务
汇款确认
相关文档
联系我们
域名资讯
主机资讯
行业动态
网页制作
php教程
mysql教程
域名资讯
云计算资讯
网络编程
您当前的位置:
首页
>
网络编程
>
Net教程
WEB上调用HttpWebRequest奇怪问题的解决方法
时间:2015-01-29 来源:互联网 作者:佚名
今天做了个在局域网的某客户端取得该局域网的公网IP的小程序,方法是通过登陆外网,让外网告诉你所在局域网的公网IP是多少,方法如下:
复制代码
代码如下:
Uri uri = new Uri("http://www.jb51.net/");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = 0;
req.CookieContainer = new CookieContainer();
req.GetRequestStream().Write(new byte [0], 0, 0);
HttpWebResponse res = (HttpWebResponse)(req.GetResponse());
StreamReader rs = new StreamReader(res.GetResponseStream(), System.Text.Encoding.GetEncoding("GB18030"));
string s = rs.ReadToEnd();
rs.Close();
req.Abort();
res.Close();
System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(s, @"ClientIP: \[(?<IP>[0-9\.]*)\]");
if (m.Success) IP = m.Groups["IP"].Value;
这个程序在应用程序上测试通过,可是到了WEB上,死活就是不过,报错误:为不能连接失败,不能到达远程
服务器
。
“不能连接到远程服务器”这种问题怎么可能发生呢,我明明可以上网的,而且应用程序说明了我的代码是正确的,开始想难道是端口问题?可是我是 localhost啊,改了本地虚拟站点端口也没用。然后就开始疯狂的baidu,google,查到的相似问题不少,没有解决的。
没办法,只好找应用程序和WEB的不同点,其实真相总是和自己擦肩而过,应用程序在调用这段代码时,会自动去调用IE的上网设置,如果本地是通过代理上网的话,它会通过代理来连接远程服务器;但恰恰WEB上和应用程序不同,注意下面图中的IE设置:
做WEB的都知道,我们在本地调试WEB时用的是localhost,如果这个也用代理的话那肯定调试不过,所以都会把最下面那个“对于本地地址不使用代理服务器”勾上。
现在可以明白了,原来是这个搞鬼,我在本地调试,不通过代理当然不能上外网。在代码中加入如下2句
IWebProxy iWebProxy = new WebProxy("172.17.85.16:8080", true);
req.Proxy = iWebProxy;
这样问题就解决了,可是这只是碰到问题解决问题,虽然解决,不代表这个方案可行。
其实作为服务端,根本没必要绕一大圈,还通过其他站点来使得本地获知自己的IP,我们服务端在本地发出请求时就知道了,只要简单一句话:Page.Request.UserHostAddress,我这里就不再赘诉,只说一个取得客户端真实IP的方法:
string IP = (Request.ServerVariables["HTTP_VIA"]!=null)
?Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString()
:Request.ServerVariables["REMOTE_ADDR"].ToString();
来顶一下
返回首页
推荐资讯
asp.net(C#) 生成随机验证码的代码
常用的生成验证码程序,图片效果如下: 源程序如下: 复制
ASP.NET 2.0,C#----图像特效处理
利用.NET 提供的类,如Drawing.Bitmap ,Drawing.Bitmap 等,
相关文章
无相关信息
栏目更新
栏目热门
返回首页
关于我们
联系我们
付款方式
价格总览
资讯中心
友情链接
媒体关注
有问必答
投诉建议
网站备案
《中华人民共和国增值电信业务经营许可证》编号:川B2-20080058号
官方网址:
xibushuju.com
西部数据
Copyright © 2002~2015
天府快车
版权所有
电话总机:
028-86758058
(50线) 传真:
028-86758058