Jsoup调用印度铁路查询POST接口返回404而Postman正常的代码问题排查
问题原因及解决方案
1. 核心错误:请求URL拼写错误
你代码中填写的请求路径为https://enquiry.indianrail.gov.in/mntes/q?,末尾多了一个多余的?,实际正确的接口路径应该是https://enquiry.indianrail.gov.in/mntes/q。
POST请求的表单参数不会拼接在URL路径后,多余的问号会导致服务端将q?识别为请求资源名,匹配不到对应接口就返回404错误。
2. 其他可能存在的问题
- 缺少请求必要的Cookie:你通过Postman发起请求时,会自动携带此前访问站点生成的Cookie(比如会话ID
JSESSIONID),而Jsoup代码中没有预先请求主页获取、携带对应Cookie,可能被服务端的拦截规则拦截。 - 缺失必要请求头:部分服务端会校验
Accept、Accept-Language等请求头,可对照火狐开发者工具抓到的请求头,在Jsoup中补充完整。
修正后的代码示例
// 第一步:先请求主页获取会话Cookie Connection.Response homeRes = Jsoup.connect("https://enquiry.indianrail.gov.in/mntes/") .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0") .method(Connection.Method.GET) .execute(); // 第二步:携带Cookie发起POST请求,注意URL末尾没有多余的? Document doc= Jsoup.connect("https://enquiry.indianrail.gov.in/mntes/q") .data("opt","TrainRunning") .data("subOpt","FindStationList") .data("trainNo",trainNumber) .data("jStation","") .data("jDate","25-Aug-2021") .data("jDateDay","Wed") .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0") .referrer("https://enquiry.indianrail.gov.in/mntes/") .cookies(homeRes.cookies()) // 携带从主页拿到的Cookie .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") .ignoreHttpErrors(true) .post(); System.out.println(doc.text());
内容的提问来源于stack exchange,提问作者IronFist
相关产品推荐
相关产品推荐

