作者 主題: 請問該如何用Java讀取IE cooke的問題  (閱讀 7662 次)

0 會員 與 1 訪客 正在閱讀本文。

andrea523

  • 懷疑的國中生
  • **
  • 文章數: 62
    • 檢視個人資料
請問該如何用Java讀取IE cooke的問題
« 於: 2008-10-21 00:27 »
各位大大好,小弟的問題如上
小弟看了很多相關文章(如下)

http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Cookies.html
http://www.ccw.com.cn/htm/center/prog/02_6_21_3.asp
http://www.hccp.org/java-net-cookie-how-to.html
http://blog.csdn.net/java2000_net/archive/2008/07/28/2721644.aspx
http://www.daniweb.com/forums/thread143092.html
http://bbs.linuxpk.com/redirect.php?tid=35313&goto=lastpost

目前只會接收cookie與傳送cookie
但現階段小弟真正的需求是想先用IE登入Yahoo拍賣網站
然後用Yahoo傳回含有帳密的cookie透過Java接收然後送出
(以Cookie做自動登入的功能)
由於不知道該如何讀取IE的cookie,請問有什麼辦法可以讀取IE cookie嗎? :'(

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: 請問該如何用Java讀取IE cooke的問題
« 回覆 #1 於: 2008-10-21 10:34 »
改用Firefox吧,他可以看到目前所有的cookie。

另外,cookie也是header的欄位,所以可以用一些讓你看http header的外掛來看目前設定的cookie。
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

andrea523

  • 懷疑的國中生
  • **
  • 文章數: 62
    • 檢視個人資料
回覆: 請問該如何用Java讀取IE cook
« 回覆 #2 於: 2008-10-21 17:48 »
改用Firefox吧,他可以看到目前所有的cookie。

另外,cookie也是header的欄位,所以可以用一些讓你看http header的外掛來看目前設定的cookie。
感謝這位大大,firefox的確可以到cookie的內容
小弟我登入Yahoo拍賣網站後得到幾組cookie,
認為這一組cookie應該是登入要用的如下
名稱: uid
內容: uid=c4d01b1a-9f52-11dd-8b89-001d096471ea&_hmacv=1&_salt=1554167504&_keyid=k1&_hmac=99c18a2810e5c3e062000a5a1b48dd81cc214c2f
主機: ad.yieldmanager.com
路徑: /
於是小弟用java.net.*套件去送出所回送的cookie,如下(但還是無法取得登入後所要的網頁),煩請各位大大幫幫忙~
代碼: [選擇]
import java.net.*;
import java.io.*;

public class RetrieveCookies{
public static void main(String[] args)throws Exception{
URL myUrl = new URL("http://tw.page.bid.yahoo.com/tw/auction/1170687196");
                URLConnection urlConn = null;
                String myCookie = "uid=c4d01b1a-9f52-11dd-8b89-001d096471ea";
   
        myUrl = new URL("http://tw.page.bid.yahoo.com/tw/auction/1170687196");
               urlConn = myUrl.openConnection();
       
               urlConn.setRequestProperty("Cookie", myCookie);
       
               urlConn.connect();
       
               InputStream is = urlConn.getInputStream();
       
               File f = new File("D://test.htm");
       
               BufferedInputStream bis = new BufferedInputStream(is);
       
               BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f));
       
               int c = 0;
       
               while((c=bis.read())!=-1){
          bos.write(c);
          bos.flush();
               }
               bos.close();
               bis.close();
               is.close();
       }
}


請問是小弟送出cookie時是沒有指明主機所以才收不到所要的網頁嗎?
如果是這樣該用什麼method才可以指明送出的主機呢? 謝謝。
« 上次編輯: 2008-10-21 20:47 由 andrea523 »

fillano

  • 鑽研的研究生
  • *****
  • 文章數: 526
    • 檢視個人資料
回覆: 請問該如何用Java讀取IE cooke的問題
« 回覆 #3 於: 2008-10-22 10:05 »
我想可能不只使用到uid這個cookie,你多試幾次看看吧。如果需要的話,稍微紀錄一下登入的流程,看看有什麼變化(網址、header中的cookie及referer等)。
Sapere aude! Habe Mut, dich deines eigenen Verstandes zu bedienen! ist also der Wahlspruch der Aufklärung.

andrea523

  • 懷疑的國中生
  • **
  • 文章數: 62
    • 檢視個人資料
回覆: 請問該如何用Java讀取IE cook
« 回覆 #4 於: 2008-10-22 13:57 »
小弟我後來換了個方式
想說登入Yahoo拍賣(https)網站
於是寫了以下程式,可是還是沒辦法讓他登入然後取得自動導向的網頁
回傳的網頁如附檔...請問是哪裡寫錯了嗎?? :-[[attachment=1]

代碼: [選擇]
import java.io.*;
import java.net.*;
import java.security.Security.*;
import com.sun.net.ssl.*;
import com.sun.*;

public class sslpost {
       public static void main(String[] args)throws Exception{
String cuki="";
               System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
               java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

               URL url = new URL("https://login.yahoo.com/config /login?.intl=tw&.pd=c%3d7pP3Kh2p2e4XklntZWWfDLAC8w--&.done=https://tw.login.yahoo.com/cgi-bin/kcookie.cgi/auction/http%3a//tw.bid.yahoo.com/tw");

               HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
 
               connection.addRequestProperty("User-Agent", "Mozilla/4.0");

               connection.setRequestMethod("POST");
               connection.setFollowRedirects(true);
 
               connection.setDoOutput(true);
 
              OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(),"ASCII");
              out.write("login=xxxx@yahoo.com&passwd=xxxx");
              out.write("\r\n");
              out.flush();
 
              out.close();
 
 
              InputStream is = connection.getInputStream();
       
              File f = new File("D://test.htm");
       
              BufferedInputStream bis = new BufferedInputStream(is);
       
              BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f));
       
              int c = 0;
       
              while((c=bis.read())!=-1){
           bos.write(c);
           bos.flush();
              }
              bos.close();
              bis.close();
              is.close();
       
 
              System.out.println("Resp Code:"+connection.getResponseCode());
              System.out.println("Resp Message:"+ connection.getResponseMessage());
 
      }
}
« 上次編輯: 2008-10-22 14:01 由 andrea523 »