Curl erkennt den abgelaufenen Wert im Cookie nicht richtig
Ich versuche, ein Login auf pinterest.com mit curl durchzuführen. Ich habe folgenden Request-Response-Flow erhalten:
GET-Request das Anmeldeformular und kratzen versteckte Felder (csrftoken)POST-Request-Anmeldeinformationen (Mail und PW) und verschliffenes csrftokenSession-Cookie zum Anmelden erhaltenMit Curl kann ich die folgenden Header sehen, die gesendet und empfangen werden:
<code> GET /login/?next=%2F HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 Host: pinterest.com Referer: Accept: text/html,application/xhtml+xml,application/xml,*/* Accept-Language: de-de,en-us Connection: keep-alive HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Date: Tue, 10 Apr 2012 15:03:24 GMT ETag: "45d6a85f0ede46f13f4fc751842ce5b7" Server: nginx/0.8.54 Set-Cookie: csrftoken=dec6cb66064f318790c6d51e3f3a9612; Max-Age=31449600; Path=/ Set-Cookie: _pinterest_sess="eJyryMwNcTXOdtI3zXcKNq0qznIxyXVxK/KqSsy3tY8vycxNtfUN8a3yc3E09nXxLPdztLVVK04tLs5MsfXNAopVpVf6VnlW+Qba2gIAuqgZIg=="; Domain=pinterest.com; HttpOnly; expires=Tue, 17-Apr-2012 15:03:24 GMT; Max-Age=1334675004; Path=/ Vary: Cookie, Accept-Encoding Content-Length: 4496 Connection: keep-alive </code>
Nach Schritt 1 werden die beiden Cookies csrftoken und _pinterest_sess gesetzt. Ein Blick in die Cookie-JAR-Datei (ich verwende CURLOPT_COOKIEFILE und CURLOPT_COOKIEJAR, damit Curl die Cookie-Verarbeitung übernimmt) zeigt Folgendes:
<code> # Netscape HTTP Cookie File # http://curl.haxx.se/rfc/cookie_spec.html # This file was generated by libcurl! Edit at your own risk. pinterest.com FALSE / FALSE 1365519805 csrftoken dec6cb66064f318790c6d51e3f3a9612 #HttpOnly_.pinterest.com TRUE / FALSE -1626222087 _pinterest_sess "eJyryMwNcTXOdtI3zXcKNq0qznIxyXVxK/KqSsy3tY8vycxNtfUN8a3yc3E09nXxLPdztLVVK04tLs5MsfXNAopVpVf6VnlW+Qba2gIAuqgZIg==" </code>
Als erstes ist das #HttpOnly_ vor der _pinterest_sess-Cookie-Zeile zu beachten. Ich gehe einfach davon aus, dass Curl das in Ordnung bringt. Wenn man aber weiter schaut, kann man sehen, dass ein negativer Wert als Verfallsdatum festgelegt ist: -1626222087
Ich weiß nicht, woher das kommt, weil der Cookie mit "expires = Tue, 17-Apr-2012 15:03:24 GMT" gesetzt ist (das sind ungefähr 7 Tage in der Zukunft, gerechnet ab heute).
Bei der nächsten Anforderung wird der Cookie _pinterest_sess nicht durch Wellung gesetzt:
<code> POST /login/?next=%2F HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 Host: pinterest.com Referer: https://pinterest.com/login/?next=%2F Cookie: csrftoken=dec6cb66064f318790c6d51e3f3a9612 Accept: text/html,application/xhtml+xml,application/xml,*/* Accept-Language: de-de,en-us Connection: keep-alive Content-Length: 123 Content-Type: application/x-www-form-urlencoded HTTP/1.1 302 FOUND Content-Type: text/html; charset=utf-8 Date: Tue, 10 Apr 2012 15:05:26 GMT ETag: "d41d8cd98f00b204e9800998ecf8427e" Location: http://pinterest.com/ Server: nginx/0.8.54 Set-Cookie: _pinterest_sess="eJzLcssPCy4NTclIjvAOrjQzyywoCChISgvLDi+2tY9PrSjILEottvUN8a3yc4k09gtxrfRLt7VVK04tLs5MAYonV/qGeFb4ZkWW+4LES4tTi+KBEv4u6UZ+WYEmvlm+QOxZ6R/iWOEbEmgLAKNfJps="; Domain=pinterest.com; HttpOnly; expires=Tue, 17-Apr-2012 15:05:26 GMT; Max-Age=1334675126; Path=/ Vary: Cookie Content-Length: 0 Connection: keep-alive </code>
In der Antwort wird ein anderes _pinterest_sess-Cookie gesetzt, da curl nicht das letzte gesendet hat.
Derzeit weiß ich nicht, ob ich etwas falsch mache oder ob Curl den abgelaufenen Wert im Cookie nicht richtig analysieren kann.
Jede Hilfe wäre sehr dankbar :)
// edit Noch etwas: Lauthttp://opensource.apple.com/source/curl/curl-57/curl/lib/cookie.c Mit der Funktion curl_getdate () wird das Datum extrahiert. In der Dokumentation zu dieser Funktion sind einige Beispiele aufgeführt (http://curl.haxx.se/libcurl/c/curl_getdate.html):
So, 06. November 1994, 08:49:37 GMTSonntag, 06. November 94, 08:49:37 GMTSun Nov 6 08:49:37 199406. November 1994 08:49:37 GMT06-Nov-94 08:49:37 GMT6. November, 08.49.37 Uhr 199406. November 1994, 08:49:37 Uhr06.11.94 08:49:371994, 6. November, 08:49:37 GMT08:49:37 06.11.94Sonntag 94, 6. November, 08:49:37 Uhr1994 6. November06.11.94So 6. November 941994.Nov.6So / Nov / 6/94 / GMTSo, 06. November 1994, 08:49:37 Uhr MEZ06. November 1994, 08:49:37 ESTSo, 12. September 2004, 15:05:58 -0700Sa, 11. September 2004 21:32:11 +020020040912 15:05:58 -070020040911 +0200Keines von ihnen entspricht dem oben genannten Ablaufdatum "Di, 17-Apr-2012 15:03:24 GMT", da in allen Beispielen mit Bindestrichen nur zweistellige Jahre verwendet werden.