広告設定ページ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
}