1

我想从 Java 程序加载我自己的 TMF 播放器页面以自动导出决策点。URL 是“ http://caps.fool.com/player/staka.aspx ”。Firefox 按预期加载页面(所有 Cookie 已删除,未登录)。它对 GET 请求进行协议,如下所示:

请求 URL: http
://caps.fool.com/player/staka.aspx 请求方法:GET
状态代码:HTTP/1.1 200 OK
请求标头 12:03:26.000
用户代理:Mozilla/5.0(Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
主机: caps.fool.com
DNT: 1
连接: keep-alive
缓存控制: max-age=0
接受语言: de-de,de;q =0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8

我尝试尽可能接近编码:

  URL url = new URL("http://caps.fool.com/player/staka.aspx"); 
  HttpURLConnection connection = (HttpURLConnection)url.openConnection();
  connection.setRequestMethod("GET");
  connection.setRequestProperty(
    "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0");
  connection.setRequestProperty("Host", url.getHost());
  connection.setRequestProperty("DNT", "1");
  connection.setRequestProperty("Connection", "keep-alive");
  connection.setRequestProperty("Cache-Control", "max-age=0");
  connection.setRequestProperty("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
  connection.setRequestProperty("Accept-Encoding", "gzip, deflate");
  connection.setRequestProperty(
    "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
  inputStream = connection.getInputStream();
  ...

不过,我得到了一个不同的页面,其中包含以下内容:

<html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script>
(function() { 
var z="";var b="747279 ... 7D3B";for (var i=0;i<b.length;i+=2){z=z+parseInt(b.substring(i, i+2), 16)+",";}z =  z.substring(0,z.length-1); eval(eval('String.fromCharCode('+z+')'));})();
</script></head>
<body>
<iframe style="display:none;visibility:hidden;" src="http://my.incapsula.com/public/ga/jsTest.html" id="gaIframe"></iframe>
</body></html>

我用“...”缩短了一串相当长的数字。在这个返回的页面中,他们显示了一个无机器人提示,该提示不包含在我打算访问的原始页面中。我看到他们使用来自“incapsula.com”的技术,这可能有助于他们看到我的 GET 和 Firefox 的区别。我对各种参数和其他参数进行了很多实验,但没有任何结果会导致不同的结果。

难道不能编写一个与 Firefox 创建的请求没有区别的 GET 请求吗?知道如何做到这一点吗?

4

1 回答 1

0

不同之处是由于缺乏适当的 JavaScript 执行。

如果您想获得完整的 JS 支持,请使用Selenium浏览页面——但这将实例化一个真正的 Web 浏览器进程。

您也可以尝试使用HtmlUnit - 它具有非常好的 JavaScript 执行能力,与 Selenium 相比,它是无 GUI 的,并且性能会好很多。

于 2013-10-09T13:30:17.910 回答