J'utilise un JTextPane pour afficher les données d'une page Web qui n'est pas la mienne, donc je n'ai aucun contrôle sur son contenu. Il faut qu'un utilisateur soit connecté, donc j'utilise URLConnections pour me connecter à cette page et utiliser des cookies dans URLConnection pour récupérer des données. Cela fonctionne bien. Toutefois, lorsque je place ces données dans un JTextPane avec le type de contenu défini sur text/html, les images ne s'affichent pas car elles nécessitent ces cookies avec l'ID de session et des éléments à envoyer afin de récupérer les images téléchargées.Java JTextPane HTML image cookies
Y at-il un moyen de faire du JTextPane (bien que je puisse utiliser n'importe quoi d'autre dans le jdk qui affiche html) utiliser mes cookies?
Merci.
je stocke les cookies dans une liste chaînée:
loadText = "Logging in...";
url = new URL("http://www.example.com/login.php");
connection = url.openConnection();
connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(
connection.getOutputStream());
out.write("username=" + URLEncoder.encode(username, "UTF-8")
+ "&password=" + URLEncoder.encode(password, "UTF-8")
+ "&testcookies=1");
out.flush();
out.close();
List<String> cookies = new LinkedList<String>();
for (int i = 1; (headerName = connection.getHeaderFieldKey(i)) != null; i++) {
if (headerName.equals("Set-Cookie")) {
String cookie = connection.getHeaderField(i);
cookie = cookie.substring(0, cookie.indexOf(";"));
cookies.add(cookie);
}
}
Et je dois aussi dépouiller HTML unneccesary, ce qui me donne une chaîne I fiche dans la textPane:
String p1 = rawPage.split("<div id=\"contentstart\">")[1]
.split("</div><!--id='contentstart'-->")[0];
p1 = p1.replaceAll("<p><strong></strong></p>", "");
p1 = p1.replaceAll("<p></p>", "");
parsed = true;
JTextPane tp = new JTextPane();
tp.setEditable(false);
JScrollPane js = new JScrollPane();
js.getViewport().add(tp);
js.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
getContentPane().add(js);
js.setSize(640, 480);
tp.setContentType("text/html");
tp.setText(p1);
J'ai posté les snipets pertinents de mon code - j'ai besoin de supprimer un peu de HTML pour ne laisser que le bit dont j'ai besoin. –