基本上我正在做的是尝试从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”,这仍然会产生相同的结果。
网址出现问题。有什么想法吗?
答案 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)");
它现在有效:)
感谢所有帮助过的人,如果我浪费时间,我会感到抱歉。