2013-05-31 1 views
0

Я только начал работать с HttpClient, и я использую его для входа на мой сайт. Проблема в том, что я не могу получить файлы cookie, и поэтому я не могу войти в систему.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

Что вы имеете в виду, как обращаться с печеньем? – Raptor

+0

В моем коде я не получаю cookies, поэтому мой сеанс всегда сбрасывается. Как я могу использовать файлы 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 repo here

+0

Я пробовал, но я до сих пор не получаю куки. Когда я прохожу через cookieStore.getCookies() и покажу свое имя или значение в консоли, ничего нет. –

+0

@OlivierCosquer вы пытались подключиться к другому сайту? Возможно, проблема лежит где-то в другом месте - не прямо в вашем коде. – Xeon

+0

Спасибо за подсказку! Я попытался подключиться к другому сайту, а затем получил файлы cookie (тот, который я ожидал: PHPSESSID), поэтому я проверил свой php-код, а Tadaaaaa не существует session_start(), поэтому запрос не получил никаких файлов cookie. –