gpt4 book ai didi

java - 为什么 Java 编码的 HTTP GET 提供的网页与看似相同的 Firefox GET 请求不同?

转载 作者:行者123 更新时间:2023-12-01 04:17:43 24 4
gpt4 key购买 nike

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

Request-URL: http://caps.fool.com/player/staka.aspx
Request-Methode: GET
Status-Code: HTTP/1.1 200 OK
Request-Header 12:03:26.000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Host: caps.fool.com
DNT: 1
Connection: keep-alive
Cache-Control: max-age=0
Accept-Language: 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 的 GET 之间的区别。我对各种参数和其他参数进行了很多实验,但没有任何结果产生不同的结果。

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

最佳答案

差异是由于 JavaScript 无法正常执行造成的。

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

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

关于java - 为什么 Java 编码的 HTTP GET 提供的网页与看似相同的 Firefox GET 请求不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19269930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com