我的程序使用WebRequest和WebResponse,以便在迭代中从给定的URL下载一个HTML。例如,URL字符串将类似于
http://www.aaaa.com/cccc=varB
其中,varB对于循环中的每个迭代都是不同的字符串。
当它将文件下载到流中后,它将搜索该流中特定的文本字符串,并将它们存储到单独的文本文件中。但是,我发现在一些迭代中,它似乎没有读取任何内容(当我在地址栏中键入URL字符串时,它的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。
发布于 2012-02-11 10:37:08
这里有两件事:
首先:尝试读取字符串中的整个响应,然后使用ReadToEnd()处理字符串:
//create StreamReader that reads characters one at a time
using (StreamReader myReader = new StreamReader(myStream))
{
string content = myReader.ReadToEnd();
// Process content
}第二件事:尝试设置request.CachePolicy,以便始终确保从服务器获得最新内容。
我同意上面关于在你做任何内容之前检查状态代码的评论。
希望这有帮助
发布于 2012-02-11 09:03:35
我会使用像Fiddler这样的工具来知道实际发生了什么--您所期望的数据是否从服务器返回。顺便说一下,为什么您要两次调用ReadLine() --在某些情况下,第一个调用不能吞咽数据?
https://stackoverflow.com/questions/9238790
复制相似问题