是否有方法发送HttpWebRequest来下载所有网址并处理所有异常?

时间:2016-11-11 21:25:30

标签: c# httpwebrequest httpwebresponse

我正在通过Http MultiThreadingDownloader工作。所以我必须使用HttpWebRequest来获取部分请求。该应用程序适用于几乎所有URL。但有时,当试图获得响应时,它会抛出异常或工作错误(例如 ContentLength返回-1 TSL / SSL安全异常 cookie-必填链接

我对客户端 - 服务器关系知之甚少,所以我无法处理所有异常。

我目前正在使用这种方法:

public static HttpWebRequest SendRequest(string url) 
{
   HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
   req.AllowAutoRedirect = true;
   req.Accept = "*/*";
   req.Method = "GET";
   req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";
   req.ServicePoint.ConnectionLimit = 8;
   req.ServicePoint.Expect100Continue = true;
   req.ProtocolVersion = HttpVersion.Version10;

   ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
   ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3;

   return req;
}

HttpWebRequest应包含哪些内容才能成功获取所有网址来源的HttpWebResponse?正如我所说,我的方法并不适用于所有人。该方法的详细文档或代码块可以帮助我。

1 个答案:

答案 0 :(得分:1)

服务器可以不提供内容长度。这对于流数据很有用。在这里,你无法做很多事情。您无法支持此类网址的分段下载。除了尝试之外,没有办法发现这种情况。

HTTPS和cookie也是如此。服务器可以随意回复它想要的任何内容,并且需要任何它喜欢的输入。

您需要特别处理所有这些情况。 HTTP协议允许它们。 HttpWebRequest没有太多内置功能可以帮助您。这方面唯一有用的功能是重定向和解压缩。这是默认开启的,所以你可能甚至没有注意到它就在那里。