为什么WebRequest超时不能通过代理获得SSL?

时间:2014-09-02 18:10:20

标签: c# ssl proxy httpwebrequest .net-4.5

如果我运行以下代码,它试图在未应答的端点上获取HTTPS URL(注意端口);然后它会在第二次传递时抛出超时WebException,正如我所料:

var request = WebRequest.CreateHttp("https://stackoverflow.com:81");
request.Timeout = 1000; // ms
Stopwatch watch = Stopwatch.StartNew();
try 
{
    using(var response = request.GetResponse()) 
    {
        new StreamReader(response.GetResponseStream()).ReadToEnd();
    }
}
catch(Exception ex)
{
    Console.WriteLine(ex);
}
watch.Stop();
Console.WriteLine(watch.Elapsed);

现在,如果我通过代理连接(例如,通过打开Fiddler),则不会超时,并且仅在21秒(!)之后发生异常。我怀疑超时是特定于代理的(当我尝试通过我们内部的另一个代理进行连接时,实际持续时间会更长。)

  • 如果服务器正在侦听端口并返回错误,则不会发生这种情况。
  • HTTP不会发生这种情况,只有HTTPS
  • 我在.NET 4.5和4.5.1上尝试了相同的结果。

为什么会这样?是HttpWebRequest中的错误吗?

有没有办法解决这个问题(最好不要设置我自己的计时器线程来强制执行超时)?

0 个答案:

没有答案
相关问题