2013-05-31 51 views
0

我剛開始使用HttpClient並使用它登錄我的網站。問題是,我無法獲取餅乾,所以我不能保持登錄狀態。HttpClient 4.2.5使用cookies

這是我的代碼,可能不是很好... 有人能告訴我如何處理這個庫的cookie嗎?或者,也許它存在一個文檔或教程,我可以瞭解更多關於? (我已經檢查過在線文檔,不是很有幫助)。

public MyHttpClient() {  
    this.client = new DefaultHttpClient(); 
    this.client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY); 
}  

/** 
* Retourne le contenu d'une requête POST 
* @param url L'url de la requêtes 
* @return Le contenu de la réponse à a reque^te 
*/ 
public String sendRequest(String[] args){  
    String requestResponse = ""; 
    HttpPost post = new HttpPost(MyHttpClient.AJAX_API_URL); 
    try {    
     //Test avec httpClient 
     HttpResponse response; 
     HttpEntity entity; 

     //Déclaration de la liste des valeurs 
     List<BasicNameValuePair> listKeys = new ArrayList<>(); 
     for(int i = 0; i < args.length; i += 2){ 
      listKeys.add(new BasicNameValuePair(args[i],args[i+1])); 
     } 

     //On ajoute les clefs à la requete 
     post.setEntity(new UrlEncodedFormEntity(listKeys,Consts.UTF_8)); 

     response = client.execute(post);    
     entity = response.getEntity(); 

     //Récupération des cookies 
     for(Cookie cookie : client.getCookieStore().getCookies()){ 
      this.listCookies.add(cookie);     
      Logger.getLogger(MyHttpClient.class.getName()).log(Level.INFO, "Cookie "+cookie.getName()); 
     } 

     requestResponse = EntityUtils.toString(entity); 
    } catch (IOException ex) { 
     Logger.getLogger(MyHttpClient.class.getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     post.releaseConnection(); 
    } 

    return requestResponse; 
} 
+0

如何處理cookie,您是什麼意思? – Raptor

+0

在我的代碼中,我沒有收到任何cookie,所以我的會話總是被重置。我如何使用Cookie與HttpClient能夠檢索併發送與我的請求的cookie? –

回答

0

也許嘗試設置自己的cookieStore這樣的:

private HttpClient client; 
private CookieStore cookieStore; 
private HttpContext httpContext; 

然後在初始化:

  cookieStore = new BasicCookieStore(); 
      httpContext = new BasicHttpContext(); 
      httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 

在你sendRequest方法:

HttpResponse response = client.execute(post, httpContext); 

您可以結帳我的javautils回購代碼here

+0

我試過了,但我還是沒有收到任何餅乾。當我通過cookieStore.getCookies()循環並在控制檯中顯示它們的名稱或值時,什麼也沒有。 –

+0

@OlivierCosquer你嘗試連接到其他網站?也許問題出在別的地方 - 而不是直接在你的代碼中。 – Xeon

+0

感謝您的提示!我試圖連接到其他網站,然後我收到了cookies(我期望的一個:PHPSESSID),所以我檢查了我的php代碼,並且Tadaaaaa沒有session_start(),這就是爲什麼請求沒有收到任何cookie。 –