2016-04-01 10 views
0

Ich arbeite an einer Anwendung für einen Client. Die Website ist https // www.seekingarrangement.com/loginJava Warum werden die "Set-Cookie" -Kopfzeilen nicht gelesen?

Wenn ich Chrome oder Firefox verwenden, sehe ich einen Antwort-Header für "Set-Cookie" mit dem Wert von "laravel_session=eyJpdiI6InlXNkxTRzUxODRtR3BkT0xIR3ZDd0E9PSIsInZhbHVlIjoiMzlRaDdTSk1IRnNINjAyaWVvaGUrN25DYlJaRDVTNDVoMXBLWkdjaWNCN25Ldzg1UkVZazJ0c1JIVFhxODlMSytaRlk5Skd6Z0EyRG9XK29SUWhtOXc9PSIsIm1hYyI6ImFiNjdiYTczNDE4ZGMyOWViOTcxYTljZmUyNjhjY2ViM2E3N2ViMTBiMzBlYjA4MzgwZjhjOTVhNmVmMGM0OTMifQ%3D%3D; expires=Sat, 02-Apr-2016 04:19:15 GMT; Max-Age=82800; path=/; httponly

Wenn ich folgenden ausführen Code jedoch sind die "Set-Cookie" -Werte leer.

private void onLoad() { 
    CookieHandler.setDefault(new CookieManager()); 
    login(); 
} 

private void login() { 
    try { 
     System.out.println("Logging in..."); 
     this.email = emailField.getText(); 
     this.password = passField.getText(); 

     /* 1. connect to login url */ 
     URL URL = new URL("https://www.seekingarrangement.com/login"); 
     HttpURLConnection conn = (HttpURLConnection) URL.openConnection(); 

     /* 2. GET response string */ 
     conn.setRequestMethod("GET"); 

     /* 3. Get Response cookies */ 
     Map cookiesTest = conn.getHeaderFields(); 
     String headerKeys[] = new String[cookiesTest.size()]; 
     String headerValues[] = new String[cookiesTest.size()]; 
     for(int i = 0;i<cookiesTest.size(); i++) { 
      headerKeys[i] = conn.getHeaderFieldKey(i); 
      headerValues[i] = conn.getHeaderField(i); 
      System.out.println(i + ". " + headerKeys[i] + " : " + headerValues[i]); 
     } 

     // more code no relevant to my question 
} 

Dies lässt mich mit der folgenden Ausgabe tot der Konsole:

Logging in... 
0. null : HTTP/1.1 200 OK 
1. Server : cloudflare-nginx 
2. Date : Fri, 01 Apr 2016 05:37:35 GMT 
3. Content-Type : text/html; charset=UTF-8 
4. Transfer-Encoding : chunked 
5. Connection : keep-alive 
6. Set-Cookie : 
7. X-Powered-By : PHP/5.6.14 
8. Cache-Control : no-cache 
9. Set-Cookie : 

Wie Sie sehen können, die beide "Set-Cookie" Response-Header leer sind. Aber wenn ich mit jedem Browser Entwickler-Tools überprüfen, zeigt es die tatsächlichen Werte für „Set-Cookie“

+0

Haben Sie versucht, den User-Agent-Anfrage-Header zu setzen? – AdamSkywalker

+0

Nein, ich werde das untersuchen. Vielen Dank. Kannst du erklären, warum die Header nicht organisch sind? – dbconfession

Antwort

2

Wenn Sie die folgende Zeile entfernen

CookieHandler.setDefault(new CookieManager()); 

sollte es die Set-Cookie Header in Ihrem sysout zeigen.

Oder wenn Sie die CookieManager verwenden, sollten Sie in der Lage sein, die Cookies in den CookieStore wie unten gespeichert, um zu sehen:

CookieManager manager = new CookieManager(); 
CookieHandler.setDefault(manager); 

und Sie die Cookies im Cookie speichern betrachten:

if(manager.getCookieStore().getCookies().size() > 0) 
{ 
    System.out.println("From cookieManager : " + manager.getCookieStore().getCookies());  
} 
+0

CookieManager/CookieHandler nimmt nur 3 Cookies auf. Der Sitzungscookie wird nicht abgeholt. Wenn ich sie auskommentiere und die Cookies manuell erhalte, ist Session-Cookie vorhanden. Wie kann ich den Cookie-Manager verwenden, um den Sitzungscookie zu erhalten? – dbconfession

+0

Der CookieManager ehrt den "httponly" Teil des Cookies; Aus diesem Grund sehen Sie den Wert für den Set-Cookie-Header nicht, wenn Sie den CookieHandler verwenden. Wenn Sie den CookieManager nicht verwenden, können Sie 'conn.getHeaderField (" Set-Cookie ")' verwenden, um den Wert zu erhalten. –