【问题标题】:Calling http rest api from https rest api with error 502从 https rest api 调用 http rest api 错误 502
【发布时间】:2019-12-27 02:27:52
【问题描述】:

我调用我的 https REST APi,它使用 Postman 在另一台服务器上调用 http api,它返回 502 bad gateway 错误。 https API 的身份验证在标头中设置,并且也接受:应用程序/json。所有其他不在远程服务器上调用 ohter http api 的 https rest api 都可以正常工作。

我已经使用 SpringBoot 创建了带有身份验证的 REST API。有 GET 和 POST 方法。它们都有像 https://...这样的 URL。在调用它们之前,用户必须获得一个安全令牌。这些 Rest api 可用作驻留在部署在 tomcat 中的 Server_1 上的 war 文件。从许多 API 中,我调用了作为 jar 文件驻留在另一个 Server_2 上的另一个 Rest 服务,其 URL 的 URL 类似于 http://...。当我调用驻留在 Server_1 上的 war 文件中的一个 https rest api 时,请求进入 Server_2。 Server_2 上的 Http rest api 使用 JSON 文件回答。我可以在 Server_2 的日志中看到它,而且我已经捕获了服务器之间的 http 流量。看起来 http rest api 接收到请求并将答案发回,但是来自 Server_1 的 https RestApi 拒绝了答案,因为它没有加密并给出错误的网关 502 错误。有什么办法可以解决这个错误?

//这就是我在服务器2上调用http rest api的方式。这段代码是服务器1上https rest api的一部分(tomcat中的war文件)

public ResponseEntity<String> function()
{
RestTemplate restTemplate = new RestTemplate();
String myUrl = "http://xxxxxx:8081";
ResponseEntity<String> response = restTemplate.getForEntity(myUrl + "/api/test/suspend/12", String.class);
return responce
}

【问题讨论】:

    标签: java rest http https get


    【解决方案1】:

    您的代码中有一些小问题 最后一行(return 语句)需要以分号结尾,并且您写的是“responce”而不是“response”。

    public ResponseEntity<String> function()
    {
      RestTemplate restTemplate = new RestTemplate();
      String myUrl = "http://xxxxxx:8081";
      ResponseEntity<String> response = restTemplate.getForEntity(myUrl + "/api/test/suspend/12", String.class);
      return response;
    }
    

    您应该额外使用HTTP请求的响应内容并将其用作您实际HTTPS请求的内容,否则您将混合使用不起作用的请求。

    【讨论】:

    • 您好丹尼尔,感谢您的更正。我的问题是对调用 http rest api 的 https rest api 的调用不会返回任何内容,无论我可以看到 http rest api 返回值。你认为“内容”会有帮助吗?我将响应返回给控制器,它将 ResponseEntity 类型的响应直接返回给用户。所以我认为我确实将 http 海峡的内容返回给 https。但还是什么都没有。
    • 当我检查了 http 的响应时 - 数据属于“分块数据”类型。难道是我等待json的情况,这就是输出标记为502错误的原因吗?那么它是否可以通过其他标题以某种方式修复?
    • 对不起,自从我上次回复以来很长时间,我正在度假。我的猜测是您应该等待所有数据块,然后将它们解析为字符串,然后将答案与您的 HTTPS 请求一起发回。
    • 这里的答案也可以帮助你,试一试:stackoverflow.com/a/30960274/4763898
    【解决方案2】:

    在postman中,在Authorization标签下,有Type listbox,请选择“No Auth”

    【讨论】:

    • 克里斯托弗,谢谢你的回答。如果我不在邮递员中使用授权,那么由于没有安全令牌,我调用 http rest api 的 https rest api 将不可用。
    猜你喜欢
    • 1970-01-01
    • 2013-04-21
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多