1

単一のホストから複数のページから HTML コンテンツを取得し、そこからデータを抽出する Java アプレットを作成しました。私は Jsoup を使用しており、完全に機能していますが、ブラウザーで設定されたそのホストの Cookie を自動的に使用し、後続の要求で新しく設定された Cookie を送信します。(これはJavaによってネイティブに行われていると思います)

アプレットの実行時にサーバーによって設定されたすべての Cookie を無視し、ブラウザーが既に持っている可能性のあるすべての Cookie を無視するようにします。

私のコードはとてもシンプルです。

String url = "http://example.com/my/web-page.html";
Document document = Jsoup.connect(url).userAgent("<hard-coded static value>").get();
// Extract data from document with org.Jsoup.nodes.Document.select(), etc.

これは、すべて同じホスト (example.com) を持つ複数の URL で繰り返されます。

要約すると、私は基本的にそれをしたい:

  1. ブラウザに設定されている可能性のある example.com の Cookie を無視します。
  2. アプレットがリクエストを行ったときにサーバーが新しい Cookie を設定した場合、それ以降のリクエストではそれを無視します。可能であれば、Cookie がブラウザに保存されないようにブロックします。

私はたくさん検索しましたが、解決策を見つけることができませんでした。いくらでも助けていただければ幸いです。Apache HTTPClient やその他のサードパーティ ライブラリを使用してもかまいませんが、アプレットのファイル サイズを小さく保つために使用しないほうがよいと考えています。

事前にたくさんのありがとう:)

4

2 に答える 2

0

(メソッドConnectionからの結果の戻り値) を使用する代わりに、使用します。Jsoup.connect("url");Response

Map<String, String> cookies = new HashMah<String, String>();

Response res = Jsoup
    .connect("url")
    .cookies(cookies)
    .userAgent("userAgent")
    .method(Method.GET) //Or whatever method needed be
    .execute();

私はそれが巨大な線であることを知っていますが、それはうまくいくでしょう.

于 2012-06-08T14:35:32.563 に答える
-1

これを操作する必要がありorg.jsoup.Connection.Requestます:

    String url = "http://example.com/my/web-page.html";
    Connection con = Jsoup.connect(url).userAgent("<hard-coded static value>");
    ...
    con.get();
    ...
    Request request = con.request();
    Map<String, String> cookies = request.cookies();
    for(String cookieName : cookies.keySet()) {
        //filter cookies you want to stay in map
        request.removeCookie(cookieName);
    }

また、無効にfollowRedirectsして手動でリダイレクトする必要があります(Cookieの削除)。独自の「Cookie/ドメインリムーバー」を実装する必要があります。

JSoup内部で使用し、静的でパッケージ保護されたアクセス権を持っているため、実際にメソッドjava.net.HttpURLConnectionを呼び出すコア機能を何らかの形で傍受することはできません。また、に(プライベートオブジェクトのリクエスト)と(プライベートオブジェクトのレスポンス)を設定することはできません。さらに、独自に実装することはできません(または、コンストラクターのために実装を拡張することはできません)。JSoupにそれを使用するように強制します。executeorg.jsoup.helper.HttpConnection.Response.execute(...)reqresHttpConnectionorg.jsoup.ConnectionHttpConnectionprivate

上記のすべてを考慮すると、制限された環境で最終的に「車輪の再発明」が行われることになるため、HttpClient/HtmlUnitを使用することをお勧めします。

于 2012-06-08T13:33:02.887 に答える