【发布时间】:2017-12-13 15:57:12
【问题描述】:
我正在使用 URL 连接使用 SOAP 的 Web 服务。显然该 URL 没有正确的 https 协议,如果我想通过浏览器访问它,我需要接受此连接的“风险”。
当我想以编程方式访问时,我的问题就开始了。当我尝试发送 SOAP POST 请求时,连接已关闭并捕获到异常。
“底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。”
显然这个问题很常见,可以找到很多资源,this 和this 是最受好评的。
当我尝试这部分代码时:
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
不仅连接不起作用,而且现在给我一个:
“远程服务器返回错误:(500)内部服务器错误。”
现在我的问题是。上面的代码将协议从https切换到http?
如果不是,这行代码到底做了什么?
【问题讨论】:
-
"连接不工作,但现在我得到一个:"远程服务器返回一个错误:(500) 内部服务器错误。"实际上这意味着连接 did 工作,但是远程服务器在尝试处理请求时崩溃了。
-
"上面的代码将协议从https切换到http?"不。代码意味着用于您请求的 http 堆栈将忽略任何证书验证错误,并让请求通过。值得考虑的是,正如所写,这将影响对所有主机的所有请求。
-
@spender 我有很多连接,但它们都在同一个主机上,所以我不必担心。所以基本上那段代码正在发挥它的作用,并且不会以任何方式“改变” URL 或连接。那么要么我的请求不正确,要么远程服务器无法处理?
-
@ADyson 你是对的,这是一个错误的选择。虽然我没想到连接会出现 500 错误代码,但这是可以理解的。
-
@Noel 很公平。显然我们无法分辨,因为一个 500 故意混淆服务器错误以保护服务器的安全,但也许服务器不接受 http 连接?