Spring Boot Java Sping Boot - Rest模板(请求无响应,无错误)

enxuqcxy  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(177)

我试图创建一个GET请求来检索来自拉丁美洲的商业航班。但我只能通过失眠/ Postman 得到答案...
我通过Java中的RestTemplate发出请求,如下所示:

public class LatamRequest {

    public void consumerAPILatam(){
        RestTemplate template = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();

        //h.ttps://www.latamairlines.com/bff/air-offers/offers/search
        UriComponents uri = UriComponentsBuilder.newInstance()
                .scheme("https")
                .host("www.latamairlines.com")
                .path("bff/air-offers/offers/search")
                .queryParam("sort","RECOMMENDED")
                .queryParam("cabinType","Economy")
                .queryParam("origin","GRU")
                .queryParam("destination","BSB")
                .queryParam("inFlightDate","null")
                .queryParam("inFrom","null")
                .queryParam("inOfferId","null")
                .queryParam("outFlightDate","null")
                .queryParam("outFrom","2022-11-15T15%3A00%3A00.000Z")
                .queryParam("outOfferId","null")
                .queryParam("adult","1")
                .queryParam("child","0")
                .queryParam("infant","0")
                .queryParam("redemption","true")
                .build();

        headers.set("User-Agent", "test");
        headers.set("Accept", "*/*");
        headers.set("Content-Type", "application/json");
        headers.set("X-latam-App-Session-Id", "84196897-1687-4d8c-8e63-083091ac204f");
        headers.set("X-latam-Action-Name", "search-result.flightselection.offers-search");
        headers.set("X-latam-Application-Name", "web-air-offers");
        headers.set("X-latam-Client-Name", "web-air-offers");
        headers.set("X-latam-Track-Id", "3a4ae189-e218-4606-bd9e-8b17efc93463");
        headers.set("X-latam-Request-Id", "ff44ef24-e6d0-4cb0-984c-df1db18cee19");
        headers.set("X-latam-Application-Country", "BR");
        headers.set("X-latam-Application-Oc", "br");
        headers.set("X-latam-Application-Lang", "pt");

        HttpEntity<String> httpEntity = new HttpEntity<>(headers);
        ResponseEntity<String> response = template.exchange(uri.toUriString(), HttpMethod.GET, httpEntity, String.class); //todo: No response, no error... 
        System.out.println(response);
    }

}

执行上述程序块后,我没有得到任何响应或状态。OBS:使用相同的参数和标题,我在 Postman 或失眠症中得到状态200。
我尝试了几种方法,但都没有得到回应。有人有更有效的调试方法吗?

yi0zb3m4

yi0zb3m41#

你没有得到任何响应和异常的原因是因为服务器端得到了你的请求,并一直保持它,没有响应。所以你仍然在等待模式。我运行你的请求从java代码使用不同的http客户端,但使用确切的参数,我注意到,响应从来没有返回。我等了10多分钟,我看到程序仍然在运行。所以我修改了代码,添加了5秒的连接超时和30秒的读取超时。当我运行它的时候,我在30秒后得到了读取超时异常。所以代码设法连接到服务器端,但是服务器端没有响应。所以你在无休止的等待中。所以,我不知道为什么它能在postman上工作。可能是一些头值问题。

相关问题