我有以下情况:
要连接到互联网,我使用代理...我不完全知道代理设置,但我们使用网址自动检索配置等...
在连接到外部资源后,我必须提供与我的机器凭据不同的用户凭据。
我现在的问题:
如何将no连接到某些资源,例如google? 我有以下代码,其中哪些方法不起作用:
string url = @"http://www.google.com";
WebRequest request = WebRequest.Create(url);
Console.WriteLine("Starting");
using (WebResponse webResponse = request.GetResponse())
{
//TODO
}
Console.WriteLine("Finished");
Console.ReadLine();
还尝试了这个额外的道具:
request.Proxy = WebRequest.DefaultWebProxy;
request.Credentials = CredentialCache.DefaultCredentials;
request.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
NetworkCredential networkCredential = new NetworkCredential("usr", "psw");
request.Credentials = networkCredential;
知道该怎么做吗?
答案 0 :(得分:1)
您可以尝试添加类似于App.Config的内容:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
</defaultProxy>
</system.net>
如果这不起作用,您可以构建自己的代理类,如下所示:
添加类似于App.Config的内容:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="false">
<module type="Your.MyProxy, YourApp" />
</defaultProxy>
</system.net>
其中Your.Proxy是代理类的名称空间和类名。然后创建一个类似于此的类:
// In namespace Your
// ...
public class MyProxy: IWebProxy
{
/// ====================================================================
/// <summary>
/// The credentials to submit to the proxy server for authentication.
/// </summary>
/// <returns>An <see cref="T:System.Net.ICredentials"/> instance that contains the
/// credentials that are needed to authenticate a request to the proxy server.</returns>
/// ====================================================================
public ICredentials Credentials
{
get
{
// Read all values from the AppSettings
string username = ConfigurationManager.AppSettings["ProxyUsername"].ToString();
string password = ConfigurationManager.AppSettings["ProxyPassword"].ToString();
string domain = ConfigurationManager.AppSettings["ProxyDomain"].ToString();
return new NetworkCredential(username, password, domain);
}
set { }
}
/// ====================================================================
/// <summary>
/// Returns the URI of a proxy.
/// </summary>
/// <param name="destination">A <see cref="T:System.Uri"/> that specifies the requested
/// Internet resource.</param>
/// <returns>
/// A <see cref="T:System.Uri"/> instance that contains the URI of the proxy used to
/// contact <paramref name="destination"/>.
/// </returns>
/// ====================================================================
public Uri GetProxy(Uri destination)
{
// Use the proxy server specified in AppSettings
string proxy = ConfigurationManager.AppSettings["ProxyServer"].ToString();
return new Uri(proxy);
}
/// ====================================================================
/// <summary>
/// Indicates that the proxy should not be used for the specified host.
/// </summary>
/// <param name="host">The <see cref="T:System.Uri"/> of the host to check for proxy use.</param>
/// <returns>
/// true if the proxy server should not be used for <paramref name="host"/>; otherwise, false.
/// </returns>
/// ====================================================================
public bool IsBypassed(Uri host)
{
// Ignore localhost URIs
string[] bypassUris = ConfigurationManager.AppSettings["ProxyBypass"].ToString().Split(',');
foreach (string bypassUri in bypassUris)
{
if (host.AbsoluteUri.ToLower().Contains(bypassUri.Trim().ToLower()))
{
return true;
}
}
return false;
}
}
然后您可以在App.Config中添加更多设置,例如:
<!-- New Proxy settings -->
<add key="ProxyUsername" value="User123" />
<add key="ProxyPassword" value="Password456" />
<add key="ProxyDomain" value="your.domain" />
<add key="ProxyServer" value="http://123.456.789.000:8080" />
<add key="ProxyBypass" value="localhost, another_server" />
我希望这可以帮助您走上正确的轨道?