从 https://enquiry.indianrail.gov.in/mntes 查询火车 arrivals/departures
Query train arrivals/departures from 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,其中未预见到此特定用例。 debatable whether it is appropriate to send form parameters the way https://enquiry.indianrail.gov.in/mntes 期待它们被发送。
如果您使用的是 Java 11 或更高版本,您可以简单地通过现代 Java HTTP 客户端[=获取 POST 请求的响应29=]。它完全支持 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。您可能希望以更稳健的方式构建查询字符串。参见:
- Java URL encoding of query string parameters
- How to convert map to url query string?
我正在尝试通过使用 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,其中未预见到此特定用例。 debatable whether it is appropriate to send form parameters the way https://enquiry.indianrail.gov.in/mntes 期待它们被发送。
如果您使用的是 Java 11 或更高版本,您可以简单地通过现代 Java HTTP 客户端[=获取 POST 请求的响应29=]。它完全支持 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。您可能希望以更稳健的方式构建查询字符串。参见:
- Java URL encoding of query string parameters
- How to convert map to url query string?