Java 为什么只有在Heroku上部署时才能获得403禁止异常?

Java 为什么只有在Heroku上部署时才能获得403禁止异常?,java,spring,spring-boot,spring-mvc,Java,Spring,Spring Boot,Spring Mvc,我使用SpringBoot创建了一个简单的控制器,它使用API,进行一些格式化,并重定向到模板 它在本地运行得很好,但在Heroku上部署之后,该方法的其余部分运行得很好,除了API调用中给出403禁止错误的部分 @Controller @RequestMapping("/") public class ApptController { @Value("${code}") private String code; @Value(&

我使用SpringBoot创建了一个简单的控制器,它使用API,进行一些格式化,并重定向到模板

它在本地运行得很好,但在Heroku上部署之后,该方法的其余部分运行得很好,除了API调用中给出403禁止错误的部分

@Controller
@RequestMapping("/")
public class ApptController {

    @Value("${code}")
    private String code;
    @Value("${url}")
    private String url;
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/")
    public String checkAvailableAppt() {

        boolean isApptAvailable = false;
        List<Session> apptList = null;
        HttpHeaders headers = new HttpHeaders();
        headers.add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
        headers.setAccept(Arrays.asList(MediaType.TEXT_HTML, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON));
        HttpEntity<String> httpEntity = new HttpEntity<String>("parameters", headers);
        List<String> dates = IntStream.range(0, 3).boxed().map(day -> LocalDate.now().plusDays(day).format(DateTimeFormatter.ofPattern("dd-MM-yyyy")))
                .collect(Collectors.toList());

        for (String date : dates) {
            try {
                apptList = Objects.requireNonNull(restTemplate.exchange(String.format(url, code, date), 
                        HttpMethod.GET, httpEntity, Sessions.class).getBody()).getSessions();
                if (!apptList.isEmpty() && apptList.stream().anyMatch(session -> session.getWaitingList() == 10)) {
                    isApptAvailable = true;
                    break;
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        // business logic   
        return "index.html";
    }
}
@控制器
@请求映射(“/”)
公共类ApptController{
@值(“${code}”)
私有字符串码;
@值(“${url}”)
私有字符串url;
@自动连线
私有RestTemplate RestTemplate;
@GetMapping(“/”)
公共字符串checkAvailableAppt(){
布尔值isApptAvailable=false;
List-apptList=null;
HttpHeaders=新的HttpHeaders();
添加(“用户代理”、“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/54.0.2840.99 Safari/537.36”);
setAccept(Arrays.asList(MediaType.TEXT_HTML,MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON));
HttpEntity HttpEntity=新的HttpEntity(“参数”,标题);
List dates=IntStream.range(0,3).boxed().map(day->LocalDate.now().plusDays(day).format(DateTimeFormatter.of模式(“dd-MM-yyyy”))
.collect(Collectors.toList());
用于(字符串日期:日期){
试一试{
apptList=Objects.requirennull(restemplate.exchange(String.format)(url、代码、日期),
HttpMethod.GET,httpEntity,Sessions.class).getBody()).getSessions();
如果(!apptList.isEmpty()&&apptList.stream().anyMatch(session->session.getWaitingList()==10)){
isApptAvailable=真;
打破
}
}捕获(例外情况除外){
例如printStackTrace();
}
}
//业务逻辑
返回“index.html”;
}
}
我的问题是可能的原因是什么&我如何调试它,因为我在本地没有收到任何错误,但只部署了一次? 提前谢谢你的帮助

在该行上获取错误,如:

2021-05-09T10:55:16.857564+00:00 app[web.1]: org.springframework.web.client.HttpClientErrorException$Forbidden: 403 Forbidden: [<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2021-05-09T10:55:16.857573+00:00 app[web.1]: <HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
2021-05-09T10:55:16.857580+00:00 app[web.1]: <TITLE>ERROR... (919 bytes)]
2021-05-09T10:55:16.857564+00:00应用程序[web.1]:org.springframework.web.client.HttpClientErrorException$禁止:403禁止:[
2021-05-09T10:55:16.857573+00:00应用程序[网站1]:
2021-05-09T10:55:16.857580+00:00应用程序[web.1]:错误…(919字节)]

一个原因可能是他们正在阻止来自Heroku IP范围的请求。既然您似乎没有以任何方式进行身份验证,那么API是否可以免费使用?@Kayaman是的,它是一个公共API。我能够从本地访问,它给出了正确的结果!