【问题标题】:Failing to send JSON data using POST-method and HTTPS to Webserver with Java无法使用 POST 方法和 HTTPS 将 JSON 数据发送到使用 Java 的 Web 服务器
【发布时间】:2019-11-11 18:02:05
【问题描述】:

目前我正在尝试使用 HTTPS 和 POST 方法寻址网络服务器,并将 JSON 文件发送到该服务器。我已经尝试了几个教程,但不幸的是我只能找到 HTTP 和 Post 而不是 HTTPS 的示例。我忘了实施什么吗? 我想提供服务器的代码,但我只收到了JSON文件的地址和格式。

以前有没有人遇到过这个问题或者可以帮助我? 谢谢

public static void main(String[] args) throws IOException {

    URL url = new URL(" https://webservice.com:1234");
    HttpsURLConnection con = (HttpsURLConnection)url.openConnection();

    con.setRequestMethod("POST");
    con.setRequestProperty("Content-Type", "application/json; utf-8");
    con.setRequestProperty("Accept", "application/json");
    //con.setDoInput(true);
    con.setDoOutput(true);
    String jsonInputString = "\"ID\": \"12\"";

    System.out.println(jsonInputString);

    try(OutputStream os = con.getOutputStream()) {
        byte[] input = jsonInputString.getBytes("utf-8");
        os.write(input, 0, input.length);
        os.flush();
    }
    System.out.println(con.getResponseCode());

不幸的是,我总是收到此错误消息:

线程“主”javax.net.ssl.SSLException 中的异常:不支持或 无法识别的 SSL 消息位于 java.base/sun.security.ssl.SSLSocketInputRecord.handleUnknownRecord(SSLSocketInputRecord.java:439) 在 java.base/sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:184) 在 java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:108) 在 java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1180) 在 java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1091) 在 java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) 在 java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) 在 java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:187) 在 java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1362) 在 java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1337) 在 java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:247) 在 test.main(test.java:40)

进程以退出代码 1 结束

【问题讨论】:

  • 我注意到您的new URL(" https://webservice.com:1234"); 上有一个空格,是不是拼写错误?
  • 只是来自 IDE 的复制粘贴错误,抱歉。
  • 可能与问题无关,但您的String jsonInputString = "\"ID\": \"12\""; 不是有效的json。一个有效的 json 对象应该类似于 {"ID":"12"}.
  • 这是 IntelliJ 的自动补全。当我对 JSON 进行系统输出时,它显示为“ID”:“12”。此外,我在它周围添加了 { } 括号。不幸的是,这不会更改错误消息。

标签: java json post https webservice-client


【解决方案1】:

如果服务不安全,有时 https 会返回 SSL 错误。这在 localhost 或某些只有 http 的服务器中经常发生。也许尝试删除's'

【讨论】:

  • 感谢您的建议。我想你的意思是通过 HttpURLConnection 和包 java.net.HttpURLConnection 的连接?喜欢这里:HttpURLConnection con = (HttpURLConnection)url.openConnection(); 不幸的是,我仍然犯了同样的错误。会不会是其他问题造成的?
  • 哦,我实际上是在说您正在使用的 URL 的实际字符串,我在 localhost 服务器和没有 HTTPS 而不是这样的服务器中多次遇到该错误: URL url = new URL(" webservice.com:1234"); 把URL改成webservice.... 但是如果你这样做了,错误仍然存​​在,那不是,它可能是服务器,还有一个评论是对的,你需要添加这些 { } 到您的 JSON 是有效的,但我认为无效的 JSON 不会返回 SSL 错误
【解决方案2】:

非常感谢您的帮助,在与 Web 服务开发人员的讨论中,我意识到服务器不支持 HTTPS。这意味着到服务器的链接是错误的 - http//: 而不是 https//:

所以使用HttpURLConnection con = (HttpURLConnection)url.openConnection(); 就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 2015-02-26
    • 1970-01-01
    • 2021-10-15
    • 2016-10-10
    • 2015-11-18
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多