2010-07-29 7 views
0

J'ai une URLConnection, qui accède à une page web.Java Charger l'image depuis URLConnection

URL url = new URL("https://domain"); 
    con = url.openConnection(); 
    con.setDoOutput(true); 

Puis j'ai envoyé des données au serveur en utilisant con.setRequestProperty()

Je reçois les cookies réponse Fro champ spécifié mA à l'aide

String headerValue = con.getHeaderField(6); 

Je reçois aussi le code html et analyser une URL d'image à partir de là . Mais voici un problème. Je peux obtenir cette image seulement en renvoyant des données de cache au serveur, quand j'accède à mon image.

donc j'ouvrir une nouvelle connexion

URL url1 = new URL("https://domain/image); 
    URLConnection con1 = url1.openConnection(); 

J'envoie les biscuits au serveur con1.setRequestProperty("Cookie", headerValue);

Et enfin j'essaie d'acces l'image en utilisant BufferedInputStream, puis la création d'un iamge dans un JLabel

BufferedInputStream in = new BufferedInputStream(con1.getInputStream()); 
     ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); 
     int c; 
     while ((c = in.read()) != -1) { 
     byteArrayOut.write(c); 
     } 


     Image image = Toolkit.getDefaultToolkit().createImage(
       byteArrayOut.toByteArray()); 

    label.setIcon(new ImageIcon(image)); 

Le problème est que cela ne semble pas fonctionner. Est-ce une autre façon d'obtenir un fichier à partir d'un serveur via un URlConnection? Code d'erreur

Server returned HTTP response code: 400 for URL: https://domain/image 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) 

de Merci à l'avance

+0

Le code d'état 400 signifie "Demande incorrecte", le client envoie donc un message non valide ou non compris par le serveur. Pouvez-vous ajouter la valeur de l'en-tête Cookie que vous avez définie dans votre demande? –

+0

oh, je pensais à cela, mais seulement après votre commentaire, j'ai essayé de modifier la demande cookis. En fait le serveur m'a envoyé des cookies comme "4ASP.NET_SessionId = 5gw3fg55ildrqs552q5qoa55; path = /; HttpOnly" et il veut que je renvoie seulement 4ASP.NET_SessionId = 5gw3fg55ildrqs552q5qoa55; , sans autre. – artouiros

Répondre

0

trouvé l'erreur. Affaire classée. Utilisé ce code pour diviser la chaîne de cookies.

String temp = headerValue.substring(0, (len1-17)); 
+0

J'aime les fins heureuses :) – willcodejavaforfood

+0

Vous pouvez également accepter votre propre réponse à une question. Si vous le faites, veuillez montrer un peu de code pour votre solution, c'est-à-dire comment vous modifiez la valeur du cookie avant de le renvoyer. –

Questions connexes