基本上我正在做的是尝试从HTML页面获取一堆HTML链接。
首先,我将HTML页面下载为字符串。然后,我在该字符串中搜索一堆HTML链接,并将它们粘贴到一个列表中,然后显示在应用程序中。这一切都很好。
接下来,我需要将列表中的每一个 HTML 链接下载为字符串,然后再次搜索更多 HTML 链接并将其粘贴到列表中。但是我收到"500 内部服务器错误"。
下面是第一个下载字符串的代码:
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 内部服务器错误中所述。也许我要求太快了?任何帮助将不胜感激,因为这是我完成此计划的最后障碍。
--------------更新
好的,我有一些进展。我使用在网络上找到的一些源代码以不同的方式重写了下载循环。"启动多个异步任务并在它们完成时处理它们">
我不再收到 500 服务器错误,并且我能够下载多个内容而不会出错。但我怀疑 URL 有问题。我没有获得我应该接收的数据。
我尝试将 URL 列表设置为相同的主 URL,该主 URL 为"kissanime.com/Anime/Accel-World",并以字符串形式返回正确的 html。所以我知道下载请求工作正常。
但是当 url 是这个"kissanime.com/Anime/Accel-World/Episode-001?id=4609"时,它不会返回它应该返回的数据。相反,它返回以下内容:http://pastebin.com/C9vH01Lc
尽管当我在浏览器中尝试该确切链接时,它会正常打开到正确的页面。我还尝试将链接更改为"kissanime.com/Anime/Accel-World/Episode-001",这仍然会产生相同的结果。
所以网址有问题。有什么想法吗?
我敢打赌其中一些字符串/链接正在使用相对路径。
来自stackoverflow网页的示例:
<a href="/users/256728/black-frog" class="profile-link">Black Frog</a>
您需要将文档基路径添加到相对路径以获取完整的 Uri。然后,您可以下载下一个资源。
您在上面的评论中还提到 Uri 在常规浏览器中工作。根据站点的不同,某些站点会限制从同一 IP 地址命中相同请求的请求数。 尝试通过使用 Thread.Sleep(5000)
来减慢每个请求之间的请求速度,以查看会发生什么情况。
我想通
了: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)");
它现在可以:)
感谢所有帮助过的人,如果我浪费了任何人的时间,我很抱歉。