Lal*_*lit 0 .net windows configuration proxy
我的公司的互联网在代理服务器上使用身份验证(即每次我尝试访问任何网页时,浏览器会提示用户名/密码窗口).
现在我有一些试图访问互联网的Windows应用程序(如用于rss供稿的WebPI/Visual Studio 2008),但由于它们无法弹出验证窗口,因此它们无法通过错误连接到互联网:
(407)需要代理验证
.这里的例外是VS2008,第一次总是无法在启动页面上加载rss feed,但是当我点击链接时,它会显示身份验证窗口,之后一切正常.
我的问题是:我如何配置正常的Windows应用程序(通过app.config/app.manifest文件)访问Web,以显示身份验证窗口或提供默认凭据.
为了探索这个角度,我在VS2008上创建了一个控制台应用程序,它试图在谷歌上搜索一些东西并在控制台上显示结果.码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
namespace WebAccess.Test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter Serach Criteria:");
string criteria = Console.ReadLine();
string baseAddress = "http://www.google.com/search?q=";
string output = "";
try
{
// Create the web request
HttpWebRequest request = WebRequest.Create(baseAddress + criteria) as HttpWebRequest;
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
output = reader.ReadToEnd();
}
Console.WriteLine("\nResponse : \n\n{0}", output);
}
catch (Exception ex)
{
Console.WriteLine("\nError : \n\n{0}", ex.ToString());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,它会出错
Enter Serach Criteria:
Lalit
Error :
System.Net.WebException: The remote server returned an error: (407) Proxy Authen
tication Required.
at System.Net.HttpWebRequest.GetResponse()
at WebAccess.Test.Program.Main(String[] args) in D:\LK\Docs\VS.NET\WebAccess.
Test\WebAccess.Test\Program.cs:line 26
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)
解决自己:
创建了一个程序集以提供默认代理凭据
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
namespace ProxyCredProvider
{
public class DefProxy : IWebProxy
{
public ICredentials Credentials
{
get { return new NetworkCredential("xxxx", "xxxx"); }
set { }
}
public Uri GetProxy(Uri destination)
{
return new Uri("http://xx.xx.xx.xx:8080/");
}
public bool IsBypassed(Uri host)
{
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
安装到GAC.并使用App.Config将上述模块附加到任何试图访问Web的exe.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type="ProxyCredProvider.DefProxy, ProxyCredProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5e3bf8f3a8a14cca" />
</defaultProxy>
</system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7687 次 |
最近记录: |