2012-07-15 14 views
6

基本的には、単にサーバーからCookieを取得したいだけです。ここでは、簡単なコードですが、私はそれがなど例えばセッションIDのようなすべてのクッキーを取得するのに十分ではありません推測HttpsURLConnection and Cookies

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) { } 
    } 
} 

結果は、私が唯一のクッキーを取得することを示しています

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クッキーを取得する方法はありますか?

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を入手できますか? 誰でも助けてくれますか?どの本が役に立つの?

+2

[この回答を確認](http://stackoverflow.com/a/23865624/1223728) – Borzh

答えて

8

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

私はクッキーのすべてのヘッダを取得するための別のステートメントを使用します。あなたがサーバーに送信内容を確認するには

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

、そしてどのようなサーバーがあなたに送信し、私はあなたのプログラム(またはWebナビゲータの間にプロキシを使用することをお勧め)とサーバー。多分Charles proxyあなたを助けることができます。