C# Webresponse/Webrequest不工作

C# Webresponse/Webrequest不工作,c#,webrequest,webresponse,C#,Webrequest,Webresponse,我的程序使用WebRequest和WebResponse在迭代中从给定URL下载HTML文件。例如,URL字符串看起来像 http://www.aaaa.com/cccc=varB 其中,varB是循环中每个迭代的不同字符串 将文件下载到流中后,它将在流中搜索特定的文本字符串,并将它们存储到单独的文本文件中。然而,我发现在某些迭代中,它似乎没有读取任何内容(当我在地址栏中键入它时,它的URL字符串是有效的,因此它不是无效的URL) 我使用块将流和WebResponse对象放入中,我还有一个try

我的程序使用
WebRequest
WebResponse
在迭代中从给定URL下载HTML文件。例如,URL字符串看起来像

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

其中,
varB
是循环中每个迭代的不同字符串

将文件下载到流中后,它将在流中搜索特定的文本字符串,并将它们存储到单独的文本文件中。然而,我发现在某些迭代中,它似乎没有读取任何内容(当我在地址栏中键入它时,它的URL字符串是有效的,因此它不是无效的URL)

我使用块将流和
WebResponse
对象放入
中,我还有一个
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

我也会使用类似Fiddler的东西来了解实际发生的情况-您所期望的数据是否从服务器返回。 顺便说一句,为什么要调用ReadLine()两次?在某些情况下,第一次调用不能吞掉您的数据吗?

这里有两件事:

首先:尝试读取字符串中的整个响应,然后使用ReadToEnd()处理该字符串:

第二件事:尝试设置request.CachePolicy,以便始终确保从服务器获取最新内容

我同意上面关于在对内容进行任何操作之前检查状态代码的评论


希望这有助于

在尝试获取响应流之前尝试读取myResponse.StatusCode。每次迭代的状态代码都正常,并且我还设置了缓存策略,但经过更多的实验后,我发现如果在短时间内有太多来自同一台计算机或IP的请求,我正在查询的站点就会阻塞。从好的方面来说,我知道了状态码和缓存策略是什么。
//create StreamReader that reads characters one at a time
using (StreamReader myReader = new StreamReader(myStream))
{
    string content = myReader.ReadToEnd();
    // Process content
}