2010-06-15 86 views
2

我在登錄到Java中的任何站點時遇到了一些麻煩。我正在使用默認的URL連接POST請求,但我不確定如何正確處理Cookie。我試過這個指南:http://www.hccp.org/java-net-cookie-how-to.html但是無法使它工作。我現在一直在嘗試幾天,如果有人想幫助我,我真的需要幫助。Java:使用POST登錄時處理cookie

我可能會被告知它很混亂,我應該使用一個用於這個東西的自定義庫。我試圖下載一個,但不知道如何讓它建立和工作。我幾個小時以來一直在嘗試各種各樣的事情,而且它不會起作用。我寧願用標準的URL連接來做這件事,但如果任何人都可以幫助我找到另一個更好的工作庫,那也會很棒。

我真的很感激,如果有人可以發佈我可以學習的工作源。我需要的是:POST登錄數據到站點 - >從站點獲取並存儲cookie - >使用cookie與下一個URL連接請求獲取登錄版本的站點。

任何人都可以幫助我嗎?將非常感激。這確實意味着很多。如果有人想實際幫助我,請留下即時通訊地址。非常感謝您的時間。

+0

這個網站的重點是幫助人們解決他們的問題,並公開這樣做,讓其他人可以受益。請張貼您嘗試過的一些代碼,並說明什麼不起作用,並附帶錯誤消息。 – 2010-06-15 18:11:40

+0

這不會有所幫助。我的代碼基本上完全是我鏈接到的網站上的內容。那裏有很多代碼。 我幾天來一直在需要一個答案,任何人都可以幫我嗎? – Cloakbot 2010-06-16 21:18:49

+0

這段鏈接很可能會在一段時間後關閉。但是,該網站會保留您在此處放置的代碼。 – abelito 2012-04-18 12:56:19

回答

5

此代碼的工作對我來說:

獲取登錄形式(在我的情況下,當檢索到登錄頁面的cookie被實際設置)

URL url = new URL(formPage); 
    URLConnection conn = url.openConnection(); 

    String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0); 
    Matcher m = JSESSION_PATTERN.matcher(cookieHeader); 
    m.find(); 
    jSessionId = m.group(1); 

我還需要搶csrf值也是如此,但我現在會省略它。

我那麼做登錄:

URL url = new URL(formPage); 

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

    conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8")); 

    conn.setRequestMethod("POST"); 
    conn.setDoOutput(true); 
    conn.setDoInput(true); 

    DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 
    out.writeBytes(String.format("_csrf_token=%s&xyz=%s&zyx=%s", 
      encode(csrfToken, "UTF-8"), 
      encode(USER, "UTF-8"), 
      encode(PASS, "UTF-8"))); 

    out.close(); 

    // I have absolutely no idea why this is needed. 
    conn.getInputStream().close(); 


    String cookieHeader = conn.getHeaderFields().get("Set-Cookie").get(0); 
    Matcher m = JSESSION_PATTERN.matcher(cookieHeader); 
    m.find(); 
    jSessionId = m.group(1); 

然後我就可以檢索和使用

URL url = new URL(thePage); 
    URLConnection conn = url.openConnection(); 

    conn.setRequestProperty("Cookie", "JSESSIONID=" + encode(jSessionId, "UTF-8")); 

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String str; 
    while ((str = in.readLine()) != null) { 
     // process str... 

希望幫助程序頁面!