#java #cookies #applet
#java #файлы cookie #апплет
Вопрос:
И хоть убейте, я не могу понять, почему я не могу получить доступ к файлам cookie документа для источника апплета. Та же страница, тот же IP-адрес. Когда я действительно устанавливаю соединение через Java, я вижу отправляемые файлы cookie (в wireshark), поэтому я знаю, что они там.
Есть ли у кого-нибудь альтернативные способы попытаться получить доступ к файлам cookie документа из Java? Я обыскал весь Интернет и, похоже, не могу найти ничего, что могло бы работать, кроме getRequestProperty()
метода!
У меня есть следующий код апплета:
import java.applet.*;
import java.net.*;
import java.util.*;
import java.io.*;
import netscape.javascript.*;
public class test extends Applet {
public void init() {
try {
URL url = new URL("http://10.0.0.5/java/test.html");
String inputLine;
URLConnection conn = url.openConnection();
System.out.print("Cookies:n");
String m = conn.getRequestProperty("Cookie");
// Returns null :-/
System.out.println(m);
// Read page content => works fine... (sends cookie)
//BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
//while ((inputLine = in.readLine()) != null)
// System.out.println(inputLine);
//in.close();
} catch (Exception e) {
System.out.println("Error :(");
System.out.println(e.getMessage());
}
String alert = "alert(document.cookie);";
JSObject win = (JSObject) JSObject.getWindow(this);
win.eval(alert);
}
}
Также есть ли какой-нибудь способ получить JSObject
окно в my URLConnection
? В противном случае он помещает меня в контекст текущего окна апплета…
Комментарии:
1. является ли имя заголовка cookie «Set-Cookie:» не уверен…
2. Хммм, может быть, браузер помещает оболочку вокруг Java-соединения, оболочка обрабатывает файлы cookie, поэтому Java-соединение их не видит? Попробуйте распечатать все свойства запроса, которые вы получаете (через
getRequestProperties()
), это может помочь вам понять, что происходит.3. Hrm, похоже, мне ничего не возвращает! Интересно, почему это так…
4.
HttpOnly
Установлены ли для них файлы cookie? В некоторых случаях это не позволит Java добраться до них.
Ответ №1:
HttpURLConnection.getRequestProperty
возвращает только то, что вы добавляете к нему через addRequestProperty, которое будет отправлено при установлении соединения через connect. Заголовки ответов могут содержать заголовки Cookie или Set-Cookie, которые могут дать вам некоторое представление о файлах cookie с сервера.
Чтобы получить файлы cookie для страницы вашего апплета:
-
1. определите функцию javascript, такую как следующая — она должна быть частью страницы, содержащей ваш апплет.
function getDocumentCookies() { return document.cookie; }
-
используйте jsobject для вызова, например:
private String getDocumentCookies() { JSObject window = (JSObject)JSObject.getWindow(this); return window.call ("getDocumentCookies", new String[0]); }