gpt4 book ai didi

c# - 即使可以从 chrome 访问 XDocument 加载也会失败

转载 作者:行者123 更新时间:2023-12-02 03:54:12 26 4
gpt4 key购买 nike

var doc = XDocument.Load("https://www.predictit.org/api/marketdata/all");

失败,但有以下异常(exception):

An unhandled exception of type 'System.Net.WebException' occurred in System.dll

Additional information: The underlying connection was closed: An unexpected error occurred on a send.

即使您可以访问https://www.predictit.org/api/marketdata/all通过 Chrome。

API页面:https://predictit.freshdesk.com/support/solutions/articles/12000001878-does-predictit-make-market-data-available-via-an-api-提到将文本附加到请求 header ,可能是一个线索?

"To change the return type for any of the above, add one of the following to the request header.

Accept: application/xml

Accept: application/json"

我已检查我的防火墙,两个网络都允许使用 Visual Studio。

最佳答案

对于该特定错误,它是由 TLS 握手错误引起的。您可以通过在代码中的某个位置添加以下内容来启用适当的 TLS 协议(protocol)来修复此问题:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls
| System.Net.SecurityProtocolType.Tls11
| System.Net.SecurityProtocolType.Tls12;

一旦你解决了这个问题,你就会遇到其他的响应问题。您必须在请求上设置接受 header 。如果您尝试在没有 header 的情况下下载,它将默认返回 JSON。浏览器将包含 XML 作为 header 之一,这就是您看到 XML 的原因。

您无法使用基本的 XDocument.Load() 重载来做到这一点。您要么必须以字符串形式单独下载内容,要么至少获取具有正确 header 的流并使用正确的重载。

XDocument GetSecureXDocument(string url)
{
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
var client = new WebClient
{
Headers = { [HttpRequestHeader.Accept] = "application/xml" }
};
using (var stream = client.OpenRead(url))
return XDocument.Load(stream);
}

关于c# - 即使可以从 chrome 访问 XDocument 加载也会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44489973/

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