当前位置: 首页 > 知识库问答 >
问题:

URLConnection上的“无效Http响应”。getInputStream()仅适用于https url版本

魏晨
2023-03-14

我在尝试访问简单的localhost https url时收到一个非常奇怪的异常。

我的env:jdk1.8.0\u 121在Windows上,我正在从Netbeans运行java main,它打开到https url的连接,该url托管在独立的jetty 9.4.5中,配置有自签名证书。

例外情况:

Java语言io。IOException:sun上的Http响应无效。反映NativeConstructorAccessorImpl。sun上的newInstance0(本机方法)。反映NativeConstructorAccessorImpl。sun上的newInstance(NativeConstructorAccessorImpl.java:62)。反映授权ConstructorAccessorImpl。java上的newInstance(DelegatingConstructorAccessorImpl.java:45)。lang.reflect。构造函数。sun的newInstance(Constructor.java:423)。网www.protocol。http。HttpURLConnection 10美元。在sun上运行(HttpURLConnection.java:1926)。网www.protocol。http。HttpURLConnection 10美元。在java上运行(HttpURLConnection.java:1921)。安全AccessController。sun的doPrivileged(本机方法)。网www.protocol。http。HttpURLConnection。sun上的getChainedException(HttpURLConnection.java:1920)。网www.protocol。http。HttpURLConnection。sun上的getInputStream0(HttpURLConnection.java:1490)。网www.protocol。http。HttpURLConnection。sun上的getInputStream(HttpURLConnection.java:1474)。网www.protocol。https。HttpsURLConnectionImpl。getInputStream(HttpsURLConnectionImpl.java:254)

  • 相同的http url工作正常
  • 在浏览器中访问https url可以正常工作

在connection.openConnection()之后,我尝试了:

int responseCode = ((HttpURLConnection) conn).getResponseCode();
String msg = ((HttpURLConnection) conn).getResponseMessage();

响应代码为-1,消息为空

HTTP响应标头:

Request URL:http://localhost:9393/MailProxyServer/index.jsp
Request Method:GET
Status Code:200 OK
Remote Address:[::1]:9393
Referrer Policy:no-referrer-when-downgrade
Response Headers
view parsed
HTTP/1.1 200 OK
Content-Type: text/html;charset=utf-8
Set-Cookie: JSESSIONID=node0113il7mdp4gwq1ff3b6gg32ks90.node0;Path=/MailProxyServer
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Length: 328
Server: Jetty(9.4.5.v20170502)

HTTPS响应头:

Request URL:https://localhost:8443/MailProxyServer/index.jsp
Request Method:GET
Status Code:200 
Remote Address:[::1]:8443
Referrer Policy:no-referrer-when-downgrade
Response Headers
content-type:text/html;charset=utf-8
server:Jetty(9.4.5.v20170502)
status:200

谢啦

共有1个答案

闾丘山
2023-03-14

最明显的原因是客户端和服务器之间的ssl/tls/密码/证书规则不同。

由于您声明您有一个自签名证书,因此您必须配置Java以了解该自签名证书。

或者将其添加到启动java的密钥库中。或者通过添加自定义证书处理来允许该自签名证书。

详见https://stackoverflow.com/a/2893932/775715

 类似资料:
  • 在此处输入图像说明public class GemfireTest extends SecurityManager{ C:\users\xxx\ideaprojects\gemfire on Desktop-MRCV2EH[40404]中的服务器,因为server1当前联机。进程ID:2640正常运行时间:7秒Geode版本:9.5.1 Java版本:1.8.0_171日志文件:C:\users\

  • REST API请求:EmployeeRequest。java id、名称、sal、位置-- 员工负责。java id、名称、sal、位置-- /api/employee 我不想在回复中使用除ID以外的其他字段 实际:`{id:“123”,“name:“null”,“sal:“null”,“location:“null”}但我只想要response id,而不是POST response的其他字段

  • 问题内容: 我正在尝试写入,但是,直到我致电,实际上才发送任何数据。即使我设置为false,也仍然不会发送。有人知道为什么吗?API文档中没有任何内容对此进行描述。 URLConnection上的Java API文档:http : //download.oracle.com/javase/6/docs/api/java/net/URLConnection.html Java的关于读取和写入URLC

  • 我正在尝试上传一个xml文件。当使用MultipartEntityBuilder将二进制格式的文件添加到HttpEntity时,我收到以下错误 我已经通过了链接 https://www.baeldung.com/httpclient-multipart-upload 我的理解是,该文件不被接受,因为http实体无法发送MultipartEntityBuilder,但我可能错了。

  • 代码段为在编辑器中工作时将可重用的代码插入到语句或脚本中提供了一种简单的方法。代码段窗格位于编辑器的右侧。如果编辑器窗口停靠在 Navicat 主窗口内,你可以点击在信息窗格中的 图标来打开代码段库。 代码段库包含所有内置和用户定义的片段。从下拉式列表中选择一个标签,或在搜索框中输入搜索字符串来筛选代码段列表。如果你想根据数据库类型显示可用的片段,你可以右击代码段库的任意位置并禁用“显示其他数据库

  • 代码段为在编辑器中工作时将可重用的代码插入到语句或脚本中提供了一种简单的方法。代码段窗格位于编辑器的右侧。如果编辑器窗口停靠在 Navicat 主窗口内,你可以点击在信息窗格中的 图标来打开代码段库。 代码段库包含所有内置和用户定义的片段。从下拉式菜单中选择一个标签,或在搜索框中输入搜索字符串来筛选代码段列表。如果你想根据数据库类型显示可用的片段,你可以按住 Control 键并点按代码段库的任意