C# 使用 HTTPS 从 URL 读取 XML 文件。 (使用 godaddy 托管)(来自 ZerosSSL 的证书)

Posted

技术标签:

【中文标题】C# 使用 HTTPS 从 URL 读取 XML 文件。 (使用 godaddy 托管)(来自 ZerosSSL 的证书)【英文标题】:C# Read a XML file from URL with HTTPS. (Hosting with godaddy) (Certificate from ZerosSSL) 【发布时间】:2019-06-11 22:03:46 【问题描述】:

由于我的网站使用 ssl 证书,我无法再从我的服务器访问 xml 文件。请帮帮我。

我有来自 ZeroSSL 页面的 4 个文件: 帐户密钥.txt; (RSA 私钥) 域-csr.txt; (CRT) (CABUNDLE) 2OmkvG1CfXtJ-sYpp5mV0……; (文件 没有扩展)qGGRddmOl62soMPdlCBeamnR......; (文件没有 扩展名)

网址现在以https开头,我目前的代码是:

string currentVersion = GetWebPage("http://sofobot.com/version.xml");
XmlDocument VersionInfo = new XmlDocument();
VersionInfo.LoadXml(currentVersion);
.
.
public static string GetWebPage(string URL)
                                
            System.Net.HttpWebRequest Request = (HttpWebRequest)(WebRequest.Create(new Uri(URL)));           
            Request.Method = "GET";
            Request.MaximumAutomaticRedirections = 4;
            Request.MaximumResponseHeadersLength = 4;            
            Request.ContentLength = 0;          
            StreamReader ReadStream = null;
            HttpWebResponse Response = null;
            string ResponseText = string.Empty;                                                                
            Response = (HttpWebResponse)(Request.GetResponse());
            Stream ReceiveStream = Response.GetResponseStream();
            ReadStream = new StreamReader(ReceiveStream, System.Text.Encoding.UTF8);
            ResponseText = ReadStream.ReadToEnd();
            Response.Close();
            ReadStream.Close();           
            return ResponseText;
        

错误 InnerException -> 堆栈跟踪:

en System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) zh System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) zh System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) en System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) zh System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResultlazyResult) en System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) en System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) zh System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult 结果) zh System.Net.TlsStream.Write(Byte[] 缓冲区,Int32 偏移量,Int32 大小) zh System.Net.ConnectStream.WriteHeaders(布尔异步)

【问题讨论】:

您遇到什么错误?证书有效吗? (如果您在 Web 浏览器中访问该 url,它是否显示为有效的 https 连接) 【参考方案1】:

无需共享您的 SSL 证书信息。

我认为这可能是一个简单的解决方案

string currentVersion = GetWebPage("http://sofobot.com/version.xml"); // https!

您需要将协议更改为 HTTPS 而不是使用 HTTP

【讨论】:

谢谢,两种方法我都试过了,错误得到了维护。解决方案是删除我的 .htaccess 文件【参考方案2】:

我找到了解决办法

我不得不在我的服务器上删除文件 .HTACCESS。该文件包含以下代码:

RewriteEngine On
RewriteCond %HTTPS off
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [L,R=301]

“http//”中的url

【讨论】:

以上是关于C# 使用 HTTPS 从 URL 读取 XML 文件。 (使用 godaddy 托管)(来自 ZerosSSL 的证书)的主要内容,如果未能解决你的问题,请参考以下文章

C# 错误:RestClient 从 SoapENV XML 读取值

无法使用 c# 从 xml 读取值/节点

如何使用php从url读取xml文件

从C#中的xml字符串获取元素[重复]

从 C# 中的大 xml 读取子节点值

UWP c# 从 StreamSocket 读取 XML