我正在尝试使用ip地址获取客户端计算机的位置。只有在客户端才能访问互联网 他/她提供代理身份验证。 我们说客户需要在浏览器上访问“www.google.com”,然后立即进行身份验证 提示窗口打开然后客户输入他/她的用户名和密码。但少数用户可能会这样做 不需要提供身份验证才能访问互联网。
这段代码对我没有帮助......
string url = "http://freegeoip.net/xml/";
WebClient wc = new WebClient();
WebProxy proxyObj = new WebProxy("http://freegeoip.net/xml/");
proxyObj.Credentials = CredentialCache.DefaultCredentials;
Uri uri = new Uri(url);
MemoryStream ms = new MemoryStream(wc.DownloadData(uri));
XmlTextReader rdr = new XmlTextReader(url);
XmlDocument doc = new XmlDocument();
ms.Position = 0;
doc.Load(ms);
ms.Dispose();
在上面的代码中,如果我使用用户名,密码和域添加网络凭证实例,那么它的工作完美 我需要从用户(客户端)获取用户名和密码,而不是在代码本身中提供默认的网络凭证 机)。
我的问题是如何提示验证所需窗口并获取用户名和密码以从URL加载下载 如果有人对这个问题有所了解,我会很高兴...
编辑:不知何故基本认证窗口提示,现在我可以获得可用于凭证的用户名和密码
try
{
var reg = HttpContext.Current.Request;
if (!String.IsNullOrEmpty(reg.Headers["Authorization"]))
{
var cred = System.Text.ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(Request.Headers["Authorization"].Substring(6))).Split(':');
var user = new { Name = cred[0], Pass = cred[1] };
string url = "http://freegeoip.net/xml/";
WebClient wc = new WebClient();
WebProxy wProxy = new WebProxy();
ICredentials crd;
crd = new NetworkCredential("'" + cred[0] + "'", "'" + cred[1] + "'");
wProxy = new WebProxy("myproxy", true, null, crd);
wc.Proxy = wProxy;
Uri uri = new Uri(url);
string content = wc.DownloadString(uri);
}
else
{
try
{
//var reg = HttpContext.Current.Request;
if (String.IsNullOrEmpty(reg.Headers["Authorization"]))
{
var res = HttpContext.Current.Response;
res.StatusCode = 401;
res.AddHeader("WWW-Authenticate", "Basic realm = \"freegeoip\"");
//res.End();
}
}
catch (Exception ex)
{
}
}
}
catch(Exception ex)
{
}
但仍然抛出“无法连接到远程服务器”