【发布时间】:2013-10-09 10:47:57
【问题描述】:
我想从 Java 程序加载我自己的 TMF 播放器页面以自动导出决策点。网址是“http://caps.fool.com/player/staka.aspx”。 Firefox 按预期加载页面(所有 Cookie 已删除,未登录)。它对 GET 请求进行协议,如下所示:
请求网址: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
连接:保持活动
缓存控制:max-age=0
接受语言:de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
接受编码:gzip、deflate
接受: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 请求吗?知道如何做到这一点吗?
【问题讨论】:
-
试试硒。当您发送获取请求时,您的浏览器会下载 js 和图像。如果您不要求他们,则可能意味着您是机器人。还有一些人检查鼠标移动。
-
浏览器拿到页面后只能下载js和图片! Java 请求未传递页面。
-
其实你是对的,尝试删除我的浏览器发送的
DNT,Cache-Controlhere's -
这个我试过了,没有区别。
-
我也试过了,我用更多的 js 得到了类似的东西,我想必须执行 js 才能获得正确的页面。最终。我相信使用 selenium 会容易得多,除非你当然有理由不使用它