gpt4 book ai didi

c# - HTTPS 网络请求失败

转载 作者:可可西里 更新时间:2023-11-01 16:28:55 26 4
gpt4 key购买 nike

当我运行下面包含的程序时,第一个 HTTPS 请求成功,但第二个请求失败。两个 url 都是有效的,都可以在浏览器中成功访问。关于成功访问第二个 URL 需要做什么的任何建议?

using System;
using System.IO;
using System.Net;

public class Program
{
private static void Main(string[] args)
{
var content = "";
bool status;
var url1 = "https://mail.google.com";
var url2 = "https://my.ooma.com";
status = DoHttpRequest(url1, out content);
OutputStatus(url1, status, content);
status = DoHttpRequest(url2, out content);
OutputStatus(url2, status, content);
Console.ReadLine();
}

private static void OutputStatus(string url, bool status, string content)
{
if (status) Console.WriteLine("Url={0}, Status=Success, content length = {1}", url, content.Length);
else Console.WriteLine("Url={0}, Status=Fail, ErrorMessage={1}", url, content);
}

private static bool DoHttpRequest(string url, out string content)
{
content = "";
var request = (HttpWebRequest) WebRequest.Create(url);
try
{
request.Method = "GET";
request.CookieContainer = null;
request.Timeout = 25000; // 25 seconds
var response = (HttpWebResponse) request.GetResponse();
var streamReader = new StreamReader(response.GetResponseStream());
content = streamReader.ReadToEnd();
return true;
}
catch (WebException ex)
{
content = ex.Message;
return false;
}
}
}

最佳答案

从历史上看,当您忘记对从 GetResponseStream() 返回的对象调用 .Close() 时,我见过的大多数此描述问题都会发生。问题存在是因为当您忘记关闭第一个请求时,第二个请求会死锁等待空闲连接。

通常这个挂起发生在第三个请求,而不是第二个。

更新:看你的repro,这与请求的顺序无关。您遇到了一个问题,因为该站点在 HTTPS 握手开始时发送了一个 TLS 警告,并且 .NET 会在这种情况发生时超时。参见 http://blogs.msdn.com/b/fiddler/archive/2012/03/29/https-request-hangs-.net-application-connection-on-tls-server-name-indicator-warning.aspx .该问题仅在 Windows Vista 及更高版本上重现,因为该警告与 WinXP 上的 HTTPS 堆栈中不存在的 TLS 扩展相关。

关于c# - HTTPS 网络请求失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9900869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com