c# - HttpWebRequest Post to Oracle Service Connection 被强行关闭
问题描述
尝试通过 ASP.net C# 使用 Oracle Warehouse Cloud REST API。API 文档
当我调用对象查询 API 的 Rest 服务时,我收到 2 个错误:
- IOException:无法从传输连接中读取数据:现有连接被远程主机强行关闭。
- SocketException:一个现有的连接被远程主机强行关闭
Oracle Support 将我引导至其支持库中的Doc ID 967964.1,其中指出 SendChunked = true; 之前已经解决了这个错误,但我没有运气添加它,我也不觉得它适合 GET REST 调用。
这是我开始的代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(HTTPsURL);
request.Method = "GET";
request.PreAuthenticate = true;
request.Credentials = cred;
request.ContentType = "application/xml";
using (var response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
var content = reader.ReadToEnd();
return content;
}
我已经能够从 SOAP UI 和 Postman 获得回复。在这两种情况下,我都需要将 Header Content-Type 设置为“application/xml”,并抢先提供授权。
在 SOAP UI 中,我的请求如下所示:
GET {My URL is HERE} HTTP/1.1
Accept-Encoding: gzip,deflate
Authorization: Basic { BASIC KEY }
Content-Type: application/xml
Host: ta3.wms.ocs.oraclecloud.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
当我尝试通过 Fiddler 观看我的 .Net 代码时,我没有看到从 .Net 应用程序传递的 Content-Type。那里有我想念的东西吗?或者我是否可能需要分块传递调用?
当 SendChunked = true 时,我收到错误:无法为不写入数据的操作设置 Content-Length 或 Chunked Encoding
当我尝试传递数据时,我收到错误:无法发送具有此动词类型的内容主体
我尝试过的几件事:
- 修改自动解压
- 修改安全协议
- 传输编码 gzip,deflate
- 启用/禁用自动重定向
- 以及以下几种变体:Accept、KeepAlive、UserAgent、CachePolicy、ProtocolVersion
也许 HttpWebRequest 不可能。我应该尝试采用更好的方法吗?
我的最终要求是从此调用中取回数据,然后启动其他 .Net 进程。
解决方案
这听起来像是 TLS 1.2 的问题,特别是因为它在 Postman 中有效,但在 .Net 中无效。旧版本的 .Net 不会自动使用 TLS 1.2 并尝试使用旧协议进行身份验证并立即被拒绝。
这个有很多修复,无论是服务器上的注册表,还是特定于应用程序的,但你应该先了解你在做什么,这样你就不会误伤自己。我建议阅读这篇文章并尝试一些修复。
推荐阅读
- matlab - Matlab用文本标记日期时间图
- c# - 如何将位图/原始图像转换为 Futronic 兼容模板
- git - git:在较新的源文件中查找行的移动位置
- encryption - 保存可解密密码
- java - 我想要调用一个 servlet 并显示带有参数的 index.js
- laravel-5.4 - __construct() 方法调用但 handle() 函数未在 laravel 作业中调用
- ios - NSNotification 中心如何管理它的观察对象?
- oracle - oracle 只选择表中不同的记录
- java-8 - 我们在 Java 8 中有 setCurrentMillisFixed 吗?
- java - 在 Android 中从 JSON 文件生成菜单项