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

rest API在postman中工作,但在spring boot中不工作

苏鸿才
2023-03-14

我正在尝试实现这个APIhttps://api.bnm.gov.my/portal#operation/ERLatest

根据上面的URL,它的GET请求必须带有值为“application/vnd.BNM.API.v1 json”的Accept-herader

当我尝试与邮递员,可以得到回应-

{
    "data": [
        {
            "currency_code": "AUD",
            "unit": 1,
            "rate": {
                "date": "2020-05-04",
                "buying_rate": 2.7454,
                "selling_rate": 2.7904,
                "middle_rate": null
            }
        },
        {
            "currency_code": "CAD",
            "unit": 1,
            "rate": {
                "date": "2020-05-04",
                "buying_rate": 3.0465,
                "selling_rate": 3.0915,
                "middle_rate": null
            }
        },
        {
            "currency_code": "EUR",
            "unit": 1,
            "rate": {
                "date": "2020-05-04",
                "buying_rate": 4.7336,
                "selling_rate": 4.7786,
                "middle_rate": null
            }
        },
        {
            "currency_code": "GBP",
            "unit": 1,
            "rate": {
                "date": "2020-05-04",
                "buying_rate": 5.3769,
                "selling_rate": 5.4269,
                "middle_rate": null
            }
        },
        {
            "currency_code": "JPY",
            "unit": 100,
            "rate": {
                "date": "2020-05-04",
                "buying_rate": 4.0464,
                "selling_rate": 4.0914,
                "middle_rate": null
            }
        },
        {
            "currency_code": "SGD",
            "unit": 1,
            "rate": {
                "date": "2020-05-04",
                "buying_rate": 3.0368,
                "selling_rate": 3.0788,
                "middle_rate": null
            }
        },
        {
            "currency_code": "USD",
            "unit": 1,
            "rate": {
                "date": "2020-05-04",
                "buying_rate": 4.33,
                "selling_rate": 4.355,
                "middle_rate": null
            }
        }
    ],
    "meta": {
        "quote": "rm",
        "session": "1130",
        "last_updated": "2020-05-04 12:16:13",
        "total_result": 7
    }
}

这就是我所做的,以在我的Spring启动应用程序中获得相同的响应-

@RequestMapping(value="/forex_check")
public String forexExchange() throws Exception{
    String url="https://api.bnm.gov.my/public/exchange-rate/USD";
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.set("Accept", "application/vnd.BNM.API.v1+json");
    HttpEntity<String> entity = new HttpEntity<String>(headers);
    ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET,entity,String.class);
    return response.getBody();
}

但它没有得到正确的回应,我得到的是-

The requested URL was rejected. Please consult with your administrator.

Your support ID is: 10497884431577109860

当我和邮递员玩的时候,我注意到,当我删除主机头时,我确实会得到同样类型的响应。但据我所知,主机头是自动设置的。是不是spring boot RestTemplate不会设置此主机头?如果没有,如何手动设置?

谢谢你们......

共有1个答案

康恩
2023-03-14

解决方案是手动设置用户代理头

在您的forexExchange()控制器方法中,只需在设置标题的地方添加这一行:headers。设置(“用户代理”、“测试”) 看起来是这样的:

    public String forexExchange() throws Exception{
        String url="https://api.bnm.gov.my/public/exchange-rate/USD";
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.set("Accept", "application/vnd.BNM.API.v1+json");
        headers.set("User-Agent", "test");
        HttpEntity<String> entity = new HttpEntity<>(headers);
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET,entity,String.class);
        return response.getBody();
    }

 类似资料:
  • 我正在尝试调用Workday招聘网络服务的Put_Background_Check操作。我已经在SoapUI中打开了WSDL文件,并成功地发送了以下XML。。。 我得到以下回应。。。 问题是,当我试图在Postman(或cURL或Python请求)中用相同的标题重新创建相同的POST请求时,我会得到无效的用户名或密码错误。SoapUI在这里做什么特别的事情吗?本案的回应如下...

  • 当我试图通过邮递员发送时,我有一个请求正在正常工作。我试图实现相同的使用代码,我面临一个错误。 我正在使用的代码- 我得到的错误是- org.springframework.web.client.HttpClientErr异常$未授权: 401未授权 但《邮递员》中同样的作品也有同样的细节。 我想说明一下 后端API不在我手里。 clientid,clientSecret,access_token

  • 我有一个python代码,用来创建一个json文件,作为post请求中的数据。 变量如下所示: 当我打印上述变量时,我得到以下输出: 当我在我的邮递员请求上使用以下输出时,它会像我期望的那样工作。但是当我使用相同的变量发送带有以下函数的超文本传输协议请求时,我得到了一个错误。 为什么我的输出在postman上工作,而不是在python本身?

  • 我能够登录我的本地(和远程服务器)与以下curl(我用Postman生成)...我可以登录成功使用另一个API客户端(Rest)与我试图在Postman中使用相同的参数/头/体。我已经关闭了SSL证书验证和发送邮递员令牌头设置(每其他堆栈溢出答案)... 卷曲: Curl-X POST\http://localhost:8080/api/user/login\-H'接受:应用程序/json'\-H

  • 我有一个两个Spring Boot应用程序。一个是进行rest调用的rest客户端。另一个只有Restendpoint的应用程序。 当rest客户机到达Restendpoint时,它会失败。 这是用于命中restendpoint的代码: 这是客户端尝试访问的其余endpoint: 这是我在带有restendpoint的应用程序中看到的错误: 为什么 Rest 调用适用于邮递员而不是我的 rest

  • 不确定是否“内容安全策略:页面的设置阻止了在https://localhost:5000/favicon.ico(”default-src“)加载资源。”会影响。我试图使用network选项卡查看此请求,但我收到了这条消息。 它还使用Swagger UI工作:https://Swagger.io/tools/swagger-ui/