2016-11-11 22 views
1

我正在通过Http上的MultiThreadingDownloader工作。所以我必须使用HttpWebRequest来获得部分请求。该应用程序适用于几乎所有的URL。但有时,试图得到回应时,它抛出异常或错误的工作(如ContentLength返回-1TSL/SSL安全例外cookie的必需的链接是否有一种方法可以发送HttpWebRequest来下载所有url并处理所有异常?

我对客户机没有足够的知识服务器关系,所以我不能处理所有的异常。

我目前使用这种方法:

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成功地为所有URL来源是什么?正如我所说,我的方法并不适用于所有人。该方法的详细文档或代码块可以帮助我。

回答

1

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

这与HTTPS和cookie是一样的。服务器可以随意回复任何它想要的内容,并需要它喜欢的任何输入。

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

+0

那么,我怎么知道服务器需要什么来成功回复我的请求? –

+0

你不能因为它是任意代码。你可以询问用户或者试试。 – usr

相关问题