2011-07-28 11 views
1

複数のGetRequestをURLに同時に送信し、自動的にループさせたいと思っています。誰も私にC#コンソールコードを与えることができますか?C#コンソールアプリケーションのURLに複数のget要求を送信するにはどうすればよいですか?

これはコードです:

using System; 
using System.Net; 
using System.IO; 

namespace MakeAGETRequest_charp 
{ 
/// <summary> 
/// Summary description for Class1. 
/// </summary> 
class Class1 
{ 
    static void Main(string[] args) 
    { 
     string sURL; 
     sURL = "EXAMPLE.COM"; 

     int things = 5; 
     while (things > 0) 
     { 
      WebRequest wrGETURL; 
      wrGETURL = WebRequest.Create(sURL); 

      Stream objStream; 
      objStream = wrGETURL.GetResponse().GetResponseStream(); 

      StreamReader objReader = new StreamReader(objStream); 

      string sLine = "1"; 
      int i = 0; 

       i++; 
       sLine = objReader.ReadLine(); 
       if (things > 0) 
        Console.WriteLine("{0}:{1}", i, sLine); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 
+0

それが何のためにあるのですを参照してください? – AndyBursh

+1

これまでにコード化したものを投稿すると、コードを修正するのに役立ちます。それ以外の場合は、GetRequestを実行する方法について素早くGoogleを実行し、要件に合わせてコードを変更できない場合はここに戻ってくることをお勧めします。あなたがこれまでに試したことのいくつかのサンプルがなければ、あまりにも多くの人々が手伝ってくれることはありません... –

+0

これは私が持っているものですが、同時に複数の要求を送信したいと思います。私はそれを送ることができればするほど、より良いです。 編集:私はここに来て、コードを貼り付けるのが難しいです、それはあまりにも大きいと言います。 – ThatsSo

答えて

0
List<Uri> uris = new List<Uri>(); 
uris.Add(new Uri("http://example.com")); 
uris.Add(new Uri("http://example2.com")); 

foreach(Uri u in uris) 
{ 
    WebRequest request = HttpWebRequest.Create(u); 
    HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
} 
+0

これは、ユーザーが望むものではなく、同時にスレッドまたはタクまたは非同期を使用して1つずつではなく、結果を実現します – K3rnel31

2

JKは、同期バージョンを提示します。 2番目のURLは、最初のURL要求から応答が受信されるまで取得されません。

ここで非同期バージョンです:

List<Uri> uris = new List<Uri>(); 
uris.Add(new Uri("http://example.com")); 
uris.Add(new Uri("http://example2.com")); 

foreach(Uri u in uris) 
{ 
    var client = new WebClient(); 

    client.DownloadDataCompleted += OnDownloadCompleted; 
    client.DownloadDataAsync(u); // this makes a GET request 
} 

... 

void OnDownloadCompleted(object sender, DownloadDataCompletedEventArgs e) 
{ 
    // do stuff here. check e for completion, exceptions, etc. 
} 

DownloadDataAsync documentation

+0

リクエストごとにWebクライアントを作成する必要がありますか、作成してコールバックハンドラを外部に設定できますかそれを再利用するためのループ? – ZombieSheep

+0

私はそれぞれのリクエストを1つ作成します。私は確信していませんが、そのように意図されていると思います。たとえば、WebClientのCancelAsync()メソッドでは、キャンセルが必要な保留中の操作(複数の場合)が指定されていません。 – jglouie

+0

あなたはそうです。私はちょうどWebClientで遊んでいて、2つの同時ダウンロードを設定しようとしたときにNotSupportedExceptionが与えられました - 「WebClientは同時I/O操作をサポートしていません」あなたは毎日何か新しいことを学びます。 :) – ZombieSheep

関連する問題