java - 从 https://enquiry.indianrail.gov.in/mntes 查询火车到达/出发
问题描述
我正在尝试通过使用 url(POST 方法)传递火车号和其他所需参数(从 web 开发人员工具-firefox 获得)来获取火车的停靠站(车站)列表,但我得到 404-page not found 错误代码。当我尝试使用 POSTMAN 时,它会获取包含请求数据的网页,代码有什么问题?
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/")
.ignoreHttpErrors(true)
.post();
System.out.println(doc.text());
先感谢您
解决方案
我试图使请求与 Jsoup 一起工作,但无济于事。正在使用一种发送表单数据的奇怪方式。表单数据在 POST 请求中作为 URL 查询参数传递。
Jsoup 使用一个简化的 HTTP API,其中没有预见到这个特定的用例。以https://enquiry.indianrail.gov.in/mntes期望的方式发送表单参数是否合适是有争议的。
如果您使用的是 Java 11 或更高版本,则可以简单地通过现代Java HTTP Client获取 POST 请求的响应。它完全支持 HTTP 协议。然后,您可以将返回的String
内容输入 Jsoup。
这是你可以做的:
// 1. Get the response
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://enquiry.indianrail.gov.in/mntes/q?opt=TrainRunning&subOpt=ShowRunC&trainNo=07482&jDate=25-Aug-2021&jDateDay=Wed&jStation=DVD%23false"))
.POST(BodyPublishers.noBody())
.build();
HttpResponse<String> response =
client.send(request, BodyHandlers.ofString());
// 2. Parse the response via Jsoup
Document doc = Jsoup.parse(response.body());
System.out.println(doc.text());
我只是从 Postman 复制粘贴了正确的 URL。您可能希望以更健壮的方式构建查询字符串。看:
推荐阅读
- javascript - Axios 抛出“内部服务器 500”错误
- mysql - 使用 Sqoop docker image 从 mysql 数据库导入数据
- python - 使用带有范围的 np.where
- wordpress - Wordpress 网站顶部有随机代码
- apache-spark-sql - 如何使用 spark SQL 将全名列值拆分为 3 列并删除数据之间的括号
- apache-spark - 使用 python 转换 sparksql 数据框中的列
- r - r ggplot2 - 如何制作具有两个值的图表?
- list - 使用 Dart & Flutter,我想提取 CheckBoxListTiles 的选中值以创建一个列表,其中包含每个选中 Checkbox 的标题
- javascript - react-dom.development.js:26086 未捕获错误:目标容器不是 DOM 元素。完全不同的代码
- java - Java/Spring-boot/Mockito @MockBean 注释工作奇怪