2012-02-11 11 views
0

私のプログラムでは、反復で指定されたURLからHTMLファイルをダウンロードするために、WebRequestWebResponseを使用しています。例えば、URL文字列はvarBがループを通る反復ごとに異なる文字列である Webresponse/Webrequest not working

varB http://www.aaaa.com/cccc=

ようになります。

ファイルをストリームにダウンロードした後、ストリームの特定の文字列を検索し、別のテキストファイルに格納します。しかし、いくつかの反復では何も読んでいないようです(URLバーはURLに入力すると有効なので、無効なURLではありません)。

ストリームとWebResponseオブジェクトをusingブロックに入れましたが、私はtry…catchブロックも持っていますが、例外は発生しません。ループ内でWebRequestWebResponseが問題になっていますか?

try 
{ 
    foreach (string name in names) 
    { 
     string urlstr = "…"; // URL format like I mentioned earlier 

     HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(urlstr); 
     myRequest.Timeout = 30000; 

     //store the response in myResponse 
     using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse()) 
     { 
      //register I/O stream associated with myResponse 
      using (Stream myStream = myResponse.GetResponseStream()) 
      { 
       //create StreamReader that reads characters one at a time 
       using (StreamReader myReader = new StreamReader(myStream)) 
       { 
        myReader.ReadLine(); 
        sw.WriteLine(name + " " + myReader.ReadLine()); 
       } 
      } 
     } 
    } 

    sw.Close(); 
} 

結果は次のようになります。

name1 stuffReadfromfile 
name2 stuffReadfromfile 
name3 stuffReadfromfile 
name4       
name5 stuffReadfromfile 
name6 
name7 stuffReadfromfile 
name8 stuffReadfromfile 
name9 
name10 stuffReadfromfile 

stuffReadfromfile後の各名前があるはずにもかかわらず。

+0

が応答ストリームを取得しようとする前にmyResponse.StatusCodeを読んで試してみてくださいに役立ちます願っています。 –

答えて

0

実際に何が起こっているかを知るために、私はFiddlerのようなものを使用します。予想されるデータがサーバーから返されているかどうかです。 ところで、なぜあなたはReadLine()を2回呼び出していますか?最初の呼び出しでデータを呑み込むことができないことがありますか?ここ

1

2つのこと:

まず:)文字列で応答全体を読み、その後、ReadToEndを(使用して文字列を処理するようにしてください:

//create StreamReader that reads characters one at a time 
using (StreamReader myReader = new StreamReader(myStream)) 
{ 
    string content = myReader.ReadToEnd(); 
    // Process content 
} 

そして二つ目:そうrequest.CachePolicyを設定しようサーバーから最新のコンテンツを取得することは常に確実です。

私はコンテンツで何かをする前にステータスコードをチェックすることに関して上記のコメントに同意します。

+0

ステータスコードは各繰り返しでOKですが、私もCachePolicyを設定しましたが、もう少し実験した後、短時間の間に同じコンピュータまたはIPからのリクエストが多すぎると、 。プラス面では、私はStatusCodeとCachePolicyが何であるかを学びました。 – ShadowCrossZero