首页 新闻 会员 周边

客户端如何获取外网地址?HttpWebRequest 远程服务器返回错误: (403) 已禁止。 求高手帮帮忙 该怎么解决 非常感谢

0
悬赏园豆:80 [已解决问题] 解决于 2012-04-15 17:01

Uri uri = new Uri("http://www.ip138.com/ip2city.asp");
System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.Referer = "http://www.ip138.com/ip2city.asp";
req.ContentLength = 0;
req.CookieContainer = new System.Net.CookieContainer();
req.GetRequestStream().Write(new byte[0], 0, 0);
System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)(req.GetResponse());
StreamReader rs = new StreamReader(res.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312"));
string s = rs.ReadToEnd();
rs.Close();
req.Abort();
res.Close();
System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(s, @"\[(?<IP>[0-9\.]*)\]");

问题补充:

本地程序获取本机外网IP地址。

euler的主页 euler | 初学一级 | 园豆:97
提问于:2012-04-12 21:14
< >
分享
最佳答案
0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace GetIp
{
    class Program
    {
        static void Main(string[] args)
        {
           Console.WriteLine( GetIPAddress());
           Console.ReadKey();
        }

        private static string GetIPAddress()
        {
            Uri uri = new Uri("http://city.ip138.com/ip2city.asp");
            System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)HttpWebRequest.Create(uri);
            req.Method = "get";
            using (Stream s = req.GetResponse().GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(s))
                {
                    string str = reader.ReadToEnd();
                    System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(str, @"\[(?<IP>[0-9\.]*)\]");
                    return m.Value;
                }
            }
        }
    }
  
}

不要发post请求。取数据发get请求就可以了。另外取ip的网址不是 http://www.ip138.com/ip2city.asp 而是 

http://city.ip138.com/ip2city.asp
 
收获园豆:60
ia00.com | 小虾三级 |园豆:568 | 2012-04-15 13:54
其他回答(4)
0

是否是需要用户名验证呀 
403应该是没有权限

使用前: 
request.UseDefaultCredentials   =   true;

HTTP   错误403|403错误   
错误代码:403.1   403.1错误是由于 "执行 "访问被禁止而造成的,若试图从目录中执行   CGI、ISAPI   或其他可执行程序,但该目录不允许执行程序时便会出现此种错误。 

错误代码:403.2   403.2错误是由于 "读取 "访问被禁止而造成的。导致此错误是由于没有可用的默认网页并且没有对目录启用目录浏览,或者要显示的   HTML   网页所驻留的目录仅标记为 "可执行 "或 "脚本 "权限。 

错误代码:403.3   403.3错误是由于 "写入 "访问被禁止而造成的,当试图将文件上载到目录或在目录中修改文件,但该目录不允许 "写 "访问时就会出现此种错误。 

错误代码:403.4   403.4错误是由于要求SSL而造成的,您必须在要查看的网页的地址中使用 "https "。 

错误代码:403.5   403.5错误是由于要求使用   128   位加密算法的   Web   浏览器而造成的,如果您的浏览器不支持128位加密算法就会出现这个错误,您可以连接微软网站进行浏览器升级。 

错误代码:403.6   403.6错误是由于IP   地址被拒绝而造成的。如果服务器中有不能访问该站点的   IP   地址列表,并且您使用的   IP   地址在该列表中时您就会返回这条错误信息。 

错误代码:403.7   403.7错误是因为要求客户证书,当需要访问的资源要求浏览器拥有服务器能够识别的安全套接字层   (SSL)   客户证书时会返回此种错误。 

错误代码:403.8   403.8错误是由于禁止站点访问而造成的,若服务器中有不能访问该站点的   DNS   名称列表,而您使用的   DNS   名称在列表中时就会返回此种信息。请注意区别403.6与403.8错误。 

错误代码:403.9   403.9错误是由于连接的用户过多而造成的,由于Web   服务器很忙,因通讯量过多而无法处理请求时便会返回这条错误。 

错误代码:403.10   403.10错误是由于无效配置而导致的错误,当您试图从目录中执行   CGI、ISAPI   或其他可执行程序,但该目录不允许执行程序时便会返回这条错误。 

错误代码:403.11   403.11错误是由于密码更改而导致无权查看页面。 

错误代码:403.12   403.12错误是由于映射器拒绝访问而造成的。若要查看的网页要求使用有效的客户证书,而您的客户证书映射没有权限访问该   Web   站点时就会返回映射器拒绝访问的错误。 

错误代码:403.13   403.13错误是由于需要查看的网页要求使用有效的客户证书而使用的客户证书已经被吊销,或者无法确定证书是否已吊销造成的。 

错误代码:403.15   403.15错误是由于客户访问许可过多而造成的,当服务器超出其客户访问许可限制时会返回此条错误。 

错误代码:403.16   403.16错误是由于客户证书不可信或者无效而造成的。 

错误代码:403.17   403.17错误是由于客户证书已经到期或者尚未生效而造成的。 

收获园豆:5
悟行 | 园豆:12559 (专家六级) | 2012-04-12 22:39
0

可能是ip138服务器屏蔽了你这台机器的访问,建议换一台电脑运行试试

收获园豆:5
dudu | 园豆:30994 (高人七级) | 2012-04-13 10:12

可能吧,在新机器上试过了,而且我的外网IP地址经常变动的。

支持(0) 反对(0) euler | 园豆:97 (初学一级) | 2012-04-13 11:56
0

其实没必要用ip138的 可以用纯真IP库 qqwry.dat

在博客园搜搜就知道咋用了

收获园豆:5
王大湿 | 园豆:457 (菜鸟二级) | 2012-04-13 11:11

能不能详细点,客户获取外网地址,.net平台,C#语言。

支持(0) 反对(0) euler | 园豆:97 (初学一级) | 2012-04-13 11:57
0

ip138那个,你直接用GET请求访问过去就能获取到。
还有现在这个网站对访问好像做了限制,我调用它的查手机号段老是报错误信息。
另外据我所知,qqwry.dat是一个IP地址和真实地址库,并不具备获取本机真实IP的功能。

收获园豆:5
os340223 | 园豆:5 (初学一级) | 2012-04-14 15:51

使用GET获得的内容是空的。得不到ip地址!

支持(0) 反对(0) euler | 园豆:97 (初学一级) | 2012-04-15 14:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册