Java 为什么只有在Heroku上部署时才能获得403禁止异常?
我使用SpringBoot创建了一个简单的控制器,它使用API,进行一些格式化,并重定向到模板 它在本地运行得很好,但在Heroku上部署之后,该方法的其余部分运行得很好,除了API调用中给出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(&
@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。我能够从本地访问,它给出了正确的结果!