Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用webclient c检查URL是否为下载链接#_C#_Download_Webclient - Fatal编程技术网

C# 使用webclient c检查URL是否为下载链接#

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

我从历史数据库中读取,对于每次读取的URL,我都下载它并将数据存储到字符串中。我希望能够确定该链接是否为下载链接,例如.exe或.zip。我假设我需要阅读标题才能确定这一点,但我不知道如何使用WebClient进行此操作。有什么建议吗

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#示例,请参见这些问题


如果有人有同样的问题,我在history places.sqlite数据库中使用了一个属性,它非常方便

sqlite包含一个名为moz_historyvisits的表,该表包含一个列visit_类型。根据[1],访问类型7是下载链接。因此,读取该值将确定它是否是下载链接,而不读取响应头,甚至不发送head方法


[1]

没错。也许有一种方法可以在下载前检查数据的大小?然而,因为我不知道;我没有太多时间,.exe、.zip和.rar就足够了。谢谢好的,我仍然需要下载字符串或获取响应流..我想过滤掉.exe等的原因是我不需要下载它们。不幸的是,并非所有链接的URL中都包含.exe,因此我需要查看响应标题:/n您可以尝试改用
DownloadStringAsync()
。一旦你有了标题,你就可以决定如何处理内容,或者取消,或者允许下载完成。