0

基本上我正在做的是试图从一个 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 内部服务器错误所述。也许我要求太快了?任何帮助将不胜感激,因为这是我完成该计划的最后一个障碍。

- - - - - - - 更新

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

我不再收到 500 服务器错误,并且我能够下载多个内容而不会出现错误。但我怀疑这些 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”,仍然产生相同的结果。

所以 URL 有问题。有任何想法吗?

4

2 回答 2

1

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

来自 stackoverflow 网页的示例:

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

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

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

于 2013-10-12T03:34:23.650 回答
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)");

现在它可以工作了:)

感谢所有提供帮助的人,如果我浪费了任何人的时间,我们深表歉意。

于 2013-10-12T18:13:25.807 回答