4

Web リクエスト (HttpWebRequest または webclient) のプロキシを取得しようとしました。コントロール パネル -> インターネット オプション -> 接続 -> LAN 設定で、次の 3 つのオプションが表示されます。

  1. 設定を自動検出
  2. 自動構成スクリプトを使用する
  3. LAN にプロキシ サーバーを使用する

どちらの設定でも、Web リクエストがブラウザと同じプロキシを取得するようにしたいのです。

これを実現するために以下のコードを使用しています。ただし、1. がチェックされている場合、ブラウザとコードで同じ URL を試してみると、コードがはるかに遅いように見えます。コードでプロキシを取得する方法は、効率的または適切ではない可能性があると思います。

ブラウザの速度を反映するためにコードを変更できるものはありますか?

    var client = (HttpWebRequest)WebRequest.Create(uriStr);
    client.Headers["something"] = something;
    client.Timeout = ConnectionTimeOut; //1 min 

    var proxyURI = WebRequest.GetSystemWebProxy().GetProxy(uri);
    var proxy = new WebProxy(proxyURI, true)
    {
        Credentials = CredentialCache.DefaultNetworkCredentials
    };
    //if there is no proxy, proxy will return the same uri
    //do we need check if client.Proxy is null or not,
    if (proxyURI != null && !string.IsNullOrEmpty(proxyURI.AbsoluteUri) && !proxy.Address.Equals(uri))
    {
        client.Proxy = proxy;
    }
4

1 に答える 1

2

あなたのアプローチは問題ありません。

速度の違いを引き起こしている可能性があるのは、ブラウザーが要求しているページをキャッシュしているか、プロキシ/プロキシ資格情報をキャッシュしており、コード内で実行しているため、ネットで新しいフェッチを実行する必要がないことです。

プロキシ/認証情報を取得した後、アプリケーション内で後続のリクエストを試みましたか?

于 2011-12-15T15:55:58.997 に答える