2009-05-03 18 views
28

httpを使用して文字列をダウンロードするためのソースコードでWebクライアントクラスを使用しています。C#webclientとプロキシサーバ

これは正常に動作していました。しかし、同社のクライアントはすべてプロキシサーバーに接続されています。そして、問題はこのことから始まりました。

アプリケーションをテストしたところ、プロキシサーバーのIPアドレスであるxxx.xxx.xxx.xxxからの応答がないため、プロキシサーバーを通過できるとは考えられませんでした。

しかし、私はまだウェブサイトのURLにナビゲートすることができますし、プロキシサーバーを経由して接続する際には、ブラウザで正しく文字列が表示されますが、私は自分のWebクライアントを使用しないとき。

はウェブで何かありますプロキシサーバーの背後からURLにアクセスできるように設定する必要がありますか?

using (WebClient wc = new WebClient()) 
{ 
    string strURL = "http://xxxxxxxxxxxxxxxxxxxxxxxx"; 

    //Download only when the webclient is not busy. 
    if (!wc.IsBusy) 
    { 
     string rtn_msg = string.Empty; 
     try 
     { 
      rtn_msg = wc.DownloadString(new Uri(strURL)); 
      return rtn_msg; 
     } 
     catch (WebException ex) 
     { 
      Console.Write(ex.Message); 
      return false; 
     } 
     catch (Exception ex) 
     { 
      Console.Write(ex.Message); 
      return false; 
     } 
    } 
    else 
    { 
     System.Windows.Forms.MessageBox.Show("Busy please try again"); 
     return false; 
    } 
} 

答えて

33

私のソリューション:

WebClient client = new WebClient(); 
WebProxy wp = new WebProxy(" proxy server url here"); 
client.Proxy = wp; 
string str = client.DownloadString("http://www.google.com"); 
+3

それはIDisposableを実装して理想的には、Webクライアントにも使用して文にする必要があります。しかし便利な投稿です。 – Orphid

+1

オニフィードよりも明白になること。上記のコード(これは完全に正当なものです)を使用して、Webクライアント上で '.Dispose'を呼び出すことを忘れないでください!また、WebProxyには、第2引数としてポート番号を使用するコンストラクタオーバーロードがあります。 – user3791372

7

私は同じ問題に遭遇しましたが、で、インターネットからファイルをダウンロードするためのWebクライアントを使用してきましたアプリケーションがapp.configで追加していたWinformアプリケーション:

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
</system.net> 

web.configで同じ行を挿入するasp.netアプリケーションでも同じ解決策が有効です。

希望すると助かります。

6

Jonathanによって提案された回答は適切ですが、コードにプロキシ認証情報とURLを指定する必要があります。通常、システムでの設定としてのクレデンシャルの使用をデフォルトで許可する方がよい(通常は、プロキシを使用する場合にはLAN設定を使用します)...

以下の回答はDavideによって提供されていますそれにはapp.configファイルを変更する必要があります。このソリューションは、IN CODEと同じことを行うため、おそらくもっと便利です。ログインで(

IWebProxy wp = WebRequest.DefaultWebProxy; 
wp.Credentials = CredentialCache.DefaultCredentials; 
wc.Proxy = wp; 

これは、アプリケーションコードがプロキシを使用できるようになります:1は、次のコードを使用することができ、ユーザのシステムで使用されるアプリケーションは、デフォルトのプロキシ設定を使用させるためには

資格情報とデフォルトのプロキシURL設定)...頭痛はありません! :)

これは、このページの今後の視聴者が問題を解決するのに役立ちます。

+1

Fiddler(ローカルプロキシクライアント)を実行しているときにどうしたらいいですか?プロキシを設定しなくても、WebClientを使用すると、すべての呼び出しがフィドラーを介してチャネルされます。 – Nilzor

14

プロキシに認証する必要がある場合は、UseDefaultCredentialsfalseに設定し、プロキシをCredentialsに設定する必要があります。

単純なプロキシが必要な場合は、上記のほとんどの行をスキップします。必要なのは次のとおりです。

WebProxy proxy = new WebProxy("mywebproxyserver.com"); 
2
 

    byte[] data; 
       using (WebClient client = new WebClient()) 
       { 
        ICredentials cred; 
        cred = new NetworkCredential("[email protected]", "mybestpassword"); 
        client.Proxy = new WebProxy("192.168.0.1",8000); 
        client.Credentials = cred; 
        string myurl="http://mytestsite.com/source.jpg"; 
        data = client.DownloadData(myUrl); 
       } 

      File.WriteAllBytes(@"c:\images\target.jpg", data); 

関連する問題