0

私のプログラムは、繰り返しで特定の URL から HTML ファイルをダウンロードするためにWebRequestandを使用します。WebResponseたとえば、URL 文字列は次のようになります。

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

wherevarBは、ループの反復ごとに異なる文字列です。

ファイルをストリームにダウンロードした後、ストリームで特定のテキスト文字列を検索し、それらを別のテキスト ファイルに保存します。ただし、一部の反復では何も読み取っていないように見えることがわかりました (アドレスバーに入力したときにその URL 文字列が有効であるため、無効な URL ではありません)。

ストリームとWebResponseオブジェクトをusingブロックに入れ、try…catchブロックもありますが、例外は発生しません。ループ内での使用WebRequestと問題はありますか?WebResponse

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後にあるはずですが。

4

2 に答える 2

0

Fiddler のようなものを使用して、実際に何が起こっているかを知ることができます。期待しているデータがサーバーから返されるかどうかです。ところで、ReadLine() を 2 回呼び出すのはなぜですか。場合によっては、最初の呼び出しでデータを飲み込むことができませんか?

于 2012-02-11T09:03:35.797 に答える