1

Java プログラムから独自の TMF プレーヤー ページをロードして、意思決定ポイントを自動的に導き出したい。URLは「http://caps.fool.com/player/staka.aspx」です。Firefox は期待どおりにページを読み込みます (すべての Cookie が削除され、ログインしていません)。次に示すように、GET 要求をプロトコル化します。

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
ホスト: caps.fool.com
DNT: 1
接続: キープアライブ
キャッシュ制御: 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 要求をプログラムすることは可能ではないでしょうか? これを行う方法はありますか?

4

1 に答える 1

0

違いは、おそらく JavaScript の実行が不足しているためです。

JS を完全にサポートしたい場合は、Seleniumを使用してページを閲覧しますが、実際の Web ブラウザー プロセスがインスタンス化されます。

HtmlUnitを試すこともできます。これは JavaScript の実行が非常に優れており、Selenium とは対照的に GUI がなく、パフォーマンスが大幅に向上します。

于 2013-10-09T13:30:17.910 に答える