C# 使用webclient c检查URL是否为下载链接#
我从历史数据库中读取,对于每次读取的URL,我都下载它并将数据存储到字符串中。我希望能够确定该链接是否为下载链接,例如.exe或.zip。我假设我需要阅读标题才能确定这一点,但我不知道如何使用WebClient进行此操作。有什么建议吗C# 使用webclient c检查URL是否为下载链接#,c#,download,webclient,C#,Download,Webclient,我从历史数据库中读取,对于每次读取的URL,我都下载它并将数据存储到字符串中。我希望能够确定该链接是否为下载链接,例如.exe或.zip。我假设我需要阅读标题才能确定这一点,但我不知道如何使用WebClient进行此操作。有什么建议吗 while (sqlite_datareader.Read()) { noIndex = false; string url = (string)sqlite_datareader["url"]; try { i
while (sqlite_datareader.Read())
{
noIndex = false;
string url = (string)sqlite_datareader["url"];
try
{
if (url.Contains("http") && (!url.Contains(".pdf")) && (!url.Contains(".jpg")) && (!url.Contains("https")) && !isInBlackList(url))
{
WebClient client = new WebClient();
client.Headers.Add("user-agent", "Only a test!");
String htmlCode = client.DownloadString(url);
}
}
}
你在正确的轨道上;成功请求后,您需要检查
响应负责人
:
var someType = "application/zip";
if (client.ResponseHeaders["Content-Type"].Contains(someType)) {
// this was a "download link"
}
棘手的部分将是确定什么构成下载链接,因为可能有这么多的内容类型。例如,如何确定XML数据是否为下载链接?尝试检查WebClient的集合以验证响应文件类型。我将发出HEAD请求,而不是加载链接后面的完整内容 HEAD方法与GET相同,只是服务器不能在响应中返回消息体。HTTP头中包含的响应HEAD请求的元信息应与响应GET请求发送的信息相同。此方法可用于获取请求隐含的实体的元信息,而无需传输实体体本身。此方法通常用于测试超文本链接的有效性、可访问性和最近的修改 引用 有关C#示例,请参见这些问题
[1] 没错。也许有一种方法可以在下载前检查数据的大小?然而,因为我不知道;我没有太多时间,.exe、.zip和.rar就足够了。谢谢好的,我仍然需要下载字符串或获取响应流..我想过滤掉.exe等的原因是我不需要下载它们。不幸的是,并非所有链接的URL中都包含.exe,因此我需要查看响应标题:/n您可以尝试改用
DownloadStringAsync()
。一旦你有了标题,你就可以决定如何处理内容,或者取消,或者允许下载完成。