8

基本的に私はサーバーからクッキーを取得したいだけです。これは単純なコードですが、sessionIDなどのすべてのCookieを取得するだけでは不十分だと思います。

import java.net.*;
import java.util.*;

    public class Cookie {

    public static void main(String[] args) {

        try {
            URL url = new URL("http://www.google.com/");
            URLConnection conn = url.openConnection();
            System.out.println(con.getHeaderField("Set-Cookie"));

        } catch (Exception e) { }
    }
}

結果は、Cookieを1つだけ取得することを示しています。

NID=61=nNSsAl4g7DfxqHE7t__ghfoCc_J-RmY7PaTNoPOd_khLdvvuqI-fnteHgnQXMzmxj_C5HdMozcGfOTt8PvePLKpbDdUlzdVZiRKwNpQIej6_T69jt9C7Oi6E4F-gWPHD; expires=Mon, 14-Jan-2013 17:16:40 GMT; path=/; domain=.google.pl; HttpOnly

FirefoxはNIDとPREFを取得するため、機能しません。

PREF cookieを取得する方法はありますか?

誰かが私にPOSTを送信するためのこの適切な方法(以下のコード)であると言うことができますか?

import java.io.*;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.net.ssl.HttpsURLConnection;

public class Cookie_Example {

    public static void main(String[] args){

        try{
            String https_url = "https://ssl.filmweb.pl/j_login";
            URL url = new URL(https_url);
            String post = "_login_redirect_url=http%253A%252F%252Fwww.filmweb.pl%252F&j_username=test.filmweb%40gmail.com&j_password=test.filmweb&_rememberMe=on&pass=zaloguj";

            HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
            con.setInstanceFollowRedirects(false);
            con.setDoInput(true);
            con.setDoOutput(true);
            con.setRequestMethod("GET");
            con.setRequestProperty("Host", "ssl.filmweb.pl");
            con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1");
            con.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
            con.setRequestProperty("Accept-Language","pl,en-us;q=0.7,en;q=0.3");
            con.setRequestProperty("Accept-Encoding","gzip, deflate");
            con.setRequestProperty("Connection","keep-alive");
            con.setRequestProperty("Referer","https://ssl.filmweb.pl/login");
            con.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
            con.setRequestProperty("Content-Length",post.length()+"");
            DataOutput output = new DataOutputStream(new BufferedOutputStream(con.getOutputStream()));
            output.write(post.getBytes());

            Map<String, List<String>> hf = con.getHeaderFields();

            Iterator it = hf.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry pairs = (Map.Entry)it.next();
                System.out.println(pairs.getKey() + " = " + pairs.getValue());
            }
        } catch (Exception e) {
        }
    }
}

結果は空のクッキーです、

Set-Cookie = [_artuser_rememberMe=;Path=/;Domain=filmweb.pl;Expires=Thu, 01-Jan-1970 00:00:00 GMT]

http://img72.imageshack.us/img72/1134/testgof.jpg

改ざんデータからの画面

これは、このコードも機能しないことを意味します。__utma、__ utmzなどのCookieを取得するにはどうすればよいですか?誰か助けてもらえますか?どの本が役に立ちますか?

4

1 に答える 1

9

あなたのステートメントでは、con.getHeaderField("Set-Cookie")"ヘッダーを1つだけ取得すると思います。しかし、サーバーは2つの異なるヘッダーで2つのCookieを送信する可能性があります。

Cookieのすべてのヘッダーを取得するために、別のステートメントを使用します。

List<String> cookies = connection.getHeaderFields().get("Set-Cookie");

サーバーに送信する内容とサーバーから送信される内容を確認するには、プログラム(またはWebナビゲーター)とサーバーの間でプロキシを使用することをお勧めします。多分Charles proxyあなたを助けることができます。

于 2012-08-08T11:19:43.790 に答える