我编写了一个 Java 小程序,用于从我们的一个 Intranet 系统读取 HTML。
我的代码如下:
public static String getOrdersInProvisioning(){
try{
URL url = new URL("https://www.internalsystem.net/system//src/order/OrderProvList.cfm");
URLConnection connection = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
String result;
StringBuilder a = new StringBuilder();
while ((inputLine = reader.readLine()) != null) {
a.append(inputLine);
a.append("\r\n");
}
reader.close();
result = a.toString();
return result;
}catch (Exception e){
return e.toString();
}
}
这个想法是我可以阅读 HTML 源代码(与我登录系统时看到的代码相同,右键单击页面并选择“查看页面源代码”)并使用生成的字符串来提取诸如我的小程序的订单号、截止日期等。
我可以成功地对此 Intranet 系统上的某些页面执行此操作(当您从一个页面移动到另一个页面时,URL 会发生变化),但不能在其他页面上成功执行此操作。我必须以有效用户身份登录系统才能正常工作。
在失败的页面上,生成的 HTML 代码似乎表明我的小程序被 JavaScript 重定向到某种登录页面:
<SCRIPT LANGUAGE="JavaScript">
self.location='/system//src/Login.cfm?redirect=1';
</SCRIPT>
我已仔细检查我是否已登录系统并且我的小程序正在正确的用户帐户下运行。但由于某种原因,它只适用于特定页面。查看失败页面的 HTML 源代码后,我猜测似乎有一段特定的 JavaScript 是导致此重定向的原因。
我的问题是,有没有办法避免这种重定向 - 或者这个 Javascript 是否可以阻止我想要做的事情?
我尝试将 Jsoup 与 followRedirects(false) 和 httpConn.addRequestProperty(...) 选项一起使用,但都无济于事。
最佳答案
这可能取决于服务器中安全性的实现方式。有时它可能会检查来源。因此,您可以尝试设置引荐来源网址属性或适当的 header 。如果您正确登录,它可能会起作用。例如。
String url = "https://www.internalsystem.net/system//src/order/OrderProvList.cfm";
doc = Jsoup.connect(url).referrer(url).get();
关于java - 从 Applet 读取 html 源代码时避免重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982971/