2

広告設定ページidでオプトインしたときに Google が発行する Cookieを取得したい(既にターゲット広告を受け入れている場合は、参照しているページを表示するためにまずオプトアウトする必要があります)。

この Cookie を取得するには、このページにあるフォームの URLに対して HTTPGETを実行する必要があることがわかりました。action問題は、この URL には新しい HTTP 接続ごとに変化するハッシュが含まれているため、まずこのページにアクセスしてこの URL を取得し、次に URL に対して を実行する必要があるGETことです。

http://www.google.com/ads/preferencesを取得するために HttpComponents を使用していますが、JSOUP でコンテンツを解析すると、スクリプトしかなく、フォームが見つかりません。

ある種のタイムアウトを使用してコンテンツが動的にロードされるため、これが発生するのではないかと心配しています...誰かがこれの回避策を知っていますか?

EDIT:ちなみに、私が今使っているコードは次のとおりです。

        HttpClient httpclient = new DefaultHttpClient();

        // Create a local instance of cookie store
        CookieStore cookieStore = new BasicCookieStore();
        // Bind custom cookie store to the local context
        ((AbstractHttpClient) httpclient).setCookieStore(cookieStore);
        CookieSpecFactory csf = new CookieSpecFactory() {
            public CookieSpec newInstance(HttpParams params) {
                return new BrowserCompatSpec() {
                    @Override
                    public void validate(Cookie cookie, CookieOrigin origin)
                            throws MalformedCookieException {
                        // Allow all cookies
                        System.out.println("Allowed cookie: " + cookie.getName() + " "
                                + cookie.getValue() + " " + cookie.getPath());
                    }
                };
            }
        };
        ((AbstractHttpClient) httpclient).getCookieSpecs().register("EASY", csf);

        // Create local HTTP context
        HttpContext localContext = new BasicHttpContext();
        // Bind custom cookie store to the local context
        localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
        HttpGet httpget = new HttpGet(doubleClickURL);
        // Override the default policy for this request
        httpclient.getParams().setParameter(
                ClientPNames.COOKIE_POLICY, "EASY"); 

        // Pass local context as a parameter
        HttpResponse response = httpclient.execute(httpget, localContext);

        HttpEntity entity = response.getEntity();

        if (entity != null) {                               
                InputStream instream = entity.getContent();

                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(instream));
                instream.close();
                // Find action attribute of form
                Document document = Jsoup.parse(reader.readLine());
                Element form = document.select("form").first();         
                String optinURL = form.attr("action");
                URL connection = new URL(optinURL);
                // ... get id Cookie

        }
4

2 に答える 2

1

このようなタスクには、 HtmlUnitSeleniumまたはjWebUnitを使用する可能性が高くなります。JSoup は Javascript を解釈しません。あなたが指している Google ページは、あなたが見ているものを生成するためにブラウザーによって実行されるべき Javascript でいっぱいです。

HtmlUnit は OS に依存せず、他に何もインストールする必要はありませんが、複雑な Javascript サイトでは使用したことがありません。HtmlUnit は、JSoup と同様に Web ページからデータを抽出することもできますが、使用したい場合は、HTML を JSoup にフィードすることもできます。

于 2012-10-31T08:22:56.003 に答える
0

やっと見つけた!doubleclick cookie プロトコルについて説明している次のサイトを見つけました。

プライバシー アドバイザリー

id次に、 nameと valueを使用してそのドメインに Cookie を設定するのと同じくらい簡単ですA。次にhttp://www.google.com/ads/preferencesに HTTP リクエストを送信すると、正しい ID 値が設定されます。

非常に具体的な質問ですが、将来の視聴者の役に立てば幸いです。

ところで、amazon.com はたとえば Ad-sense Network のメンバーであることがわかりました。doubleclick への HTTP リクエストは、メイン ページのスクリプトによって次の場所に送信されます。

http://ad.doubleclick.net/adj/amzn.us.gw.atf

そこには、id Cookie を提供する実際のコードと思われるスクリプトがあります。それでも、値付きの Cookie でこれにアクセスすると、Adoubleclick の ID が設定されます。

于 2012-10-31T10:37:46.287 に答える