C#多个DownloadString in循环,500错误

时间:2013-10-12 00:16:35

标签: c# html http request downloadstring

基本上我正在做的是尝试从HTML页面获取一堆HTML链接。

首先我将HTML页面下载为字符串。然后我搜索该字符串以获取一堆HTML链接并将它们粘贴到一个列表中,然后在应用程序中显示。一切正常。

接下来,我需要将列表中的每个HTML链接下载为字符串,然后再次搜索更多HTML链接并将其粘贴到列表中。但我收到“500内部服务器错误”。

以下是第一个DownloadString的代码:

WebClient client = new WebClient();
data = client.DownloadString(URLMain);
client.Dispose();

HTML链接从数据中识别并粘贴到列表中。然后我使用此代码循环并下载每个链接:

WebClient client2 = new WebClient();
for (int i = 1; i <= listBox1.Items.Count; i++)
{
    data = client2.DownloadString(listBox1.Items[i].ToString());

    //Search data for HTML link, stick link into list, clear data, and repeat X times.
}

我不确定我做错了什么。有点新的C#。但正如在第二部分代码中获得500内部服务器错误所提到的那样。也许我要求太快?任何帮助都会非常感激,因为这是我完成这个计划的最后一个障碍。

-------------- UPDATE

好的,我有一些进展。我使用网上找到的一些源代码重写了下载循环。 “启动多个异步任务并在完成时处理它们”

我不再收到500服务器错误,我可以下载多个东西而不会出错。但我怀疑网址有问题。我没有收到我应该收到的数据。

我尝试将URL列表设置为相同的主URL,即“kissanime.com/Anime/Accel-World”,并将正确的html作为字符串返回。所以我知道下载请求工作正常。

但当网址为“kissanime.com/Anime/Accel-World/Episode-001?id=4609”时,它不会返回应该返回的数据。相反,它会返回:http://pastebin.com/C9vH01Lc

虽然当我在浏览器中尝试完全链接时,它可以正常打开页面。 我也尝试将链接更改为“kissanime.com/Anime/Accel-World/Episode-001”,这仍然会产生相同的结果。

网址出现问题。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我敢打赌其中一些字符串/链接正在使用相对路径。

stackoverflow网页的一个例子:

<a href="/users/256728/black-frog" class="profile-link">Black Frog</a>

您需要将文档基本路径添加到相对路径以获取完整的Uri。然后你可以下载下一个资源。

您还在上面的评论中提到Uri在常规浏览器中工作。根据站点的不同,某些站点会限制从同一个IP地址命中相同数量的请求。尝试使用Thread.Sleep(5000)来查看每个请求之间的请求,以查看会发生什么。

答案 1 :(得分:0)

我想出来了:D

我必须添加

httpClient = new HttpClient(handler);
httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");

它现在有效:)

感谢所有帮助过的人,如果我浪费时间,我会感到抱歉。