2011-04-03 3 views
11

Je suis en train d'envoyer une demande de publication avec des cookies. Ceci est le code:Java HttpURLConnection - POST avec Cookie

try { 

    String query = URLEncoder.encode("key", "UTF-8") + "=" + URLEncoder.encode("value", "UTF-8"); 
    String cookies = "session_cookie=value"; 
    URL url = new URL("https://myweb"); 
    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 

    conn.setRequestProperty("Cookie", cookies); 
    conn.setRequestMethod("POST"); 
    conn.setDoInput(true); 
    conn.setDoOutput(true); 

    DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 
    out.writeBytes(query); 
    out.flush(); 
    out.close(); 

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String decodedString; 
    while ((decodedString = in.readLine()) != null) { 
     System.out.println(decodedString); 
    } 
    in.close(); 

    // Send the request to the server 
    //conn.connect(); 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Le problème est que la demande est envoyée sans les cookies. Si je ne fais que: conn.connect(); et ne pas envoyer de données, les cookies sont envoyés OK. Je ne peux pas vérifier exactement ce qui se passe, car la connexion est thorugh SSL. Je vérifie seulement la réponse.

Répondre

6

Selon le URLConnection javadoc:

The following methods are used to access the header fields and the 
contents AFTER the connection is made to the remote object: 

* getContent 
* getHeaderField 
* getInputStream 
* getOutputStream 

Avez-vous confirmé que dans votre cas de test ci-dessus la demande est d'apprendre à le serveur du tout? Je vois que vous avez l'appel à connect() après getOutputStream() et commenté en outre. Que se passe-t-il si vous le décommentez et déplacez avant l'appel à getOutputStream()?

+0

Merci! J'ai réessayé de réécrire le code PHP dans le serveur, et cela a fonctionné parfaitement. Le code que j'ai posté était OK. Je pense que le problema était dans le serveur (puis-je écrire $ _POST [$ key] au lieu de $ _POST ['key'] ou quelque chose comme ça ..). – Alberto

Questions connexes