0

私は次の状況にあります:

インターネットに接続するには、プロキシを使用します...プロキシの設定は正確にはわかりませんが、URLを使用して構成を自動的に取得します...

その後、外部リソースに接続するには、マシンのクレデンシャルとは異なるユーザークレデンシャルを提供する必要があります。

今の私の質問:

Googleなどのリソースにnoを接続するにはどうすればよいですか?もちろん機能しない次のコードがあります。

        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;

それを行う方法はありますか?

4

1 に答える 1

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" />

それがあなたを正しい軌道に乗せるのに役立つことを願っていますか?

于 2012-11-26T11:29:28.037 に答える