Curl não reconhece o valor da validade no cookie corretamente

Estou tentando realizar um log-in no pinterest.com com curl. Eu tenho o seguinte fluxo de solicitação-resposta:

GET - Solicite o formulário de login e copie os campos ocultos (csrftoken)POST-Request credenciais de login (mail e pw) e csrftoken raspadoReceber Cookie de Sessão para login

Usando o Curl, posso ver os seguintes cabeçalhos sendo enviados e recebidos:

<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>

Portanto, após a etapa 1, os dois cookies csrftoken e _pinterest_sess são definidos. Mas uma olhada no arquivo cookiejar (eu uso CURLOPT_COOKIEFILE e CURLOPT_COOKIEJAR para deixar curl manipular o processamento do cookie) mostra o seguinte:

<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>

A primeira coisa a notar é o #HttpOnly_ antes da linha de cookie _pinterest_sess. Eu apenas suponho que curl lida com isso muito bem. Mas, olhando mais adiante, pode-se ver que um valor negativo é definido como data de vencimento: -1626222087

Eu não sei de onde isso está vindo, porque o cookie é definido com "expires = ter, 17-abr-2012 15:03:24 GMT" (que é cerca de 7 dias no futuro, contando a partir de hoje).

Na próxima solicitação, o cookie _pinterest_sess não será definido por curl:

<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>

Na resposta, outro cookie _pinterest_sess é definido, já que o curl não enviou o último.

Atualmente, não sei se estou fazendo algo errado ou se o curl não consegue analisar corretamente o valor de expiração no cookie.

Qualquer ajuda seria muito apreciada :)

// edite Mais uma coisa: De acordo comhttp://opensource.apple.com/source/curl/curl-57/curl/lib/cookie.c a função curl_getdate () é usada para extrair a data. A documentação sobre essa função lista alguns exemplos (http://curl.haxx.se/libcurl/c/curl_getdate.html):

Dom, 06 nov 1994 08:49:37 GMTDomingo, 06 de novembro de 1994: 08:49:37 GMTDom Nov 6 08:49:37 199406 de novembro de 1994 08:49:37 GMT06-nov-94 08:49:37 GMT6 de novembro 08:49:37 199406 de novembro de 1994 08:49:3706-nov-94 08:49:371994 6 de novembro 08:49:37 GMT08:49:37 06-nov-94Domingo 94 6 de novembro 08:49:376 de novembro de 199406 de novembro de 94Dom 6 nov 941994.Nov.6Dom / nov / 6/94 / GMTDom, 06 nov 1994 08:49:37 CET06 de novembro de 1994 08:49:37 ESTDom, 12 set 2004 15:05:58 -0700Sáb, 11 de setembro de 2004 21:32:11 +020020040912 15:05:58 -070020040911 +0200

Nenhum deles coincide com a data de vencimento mencionada acima "Tue, 17-Apr-2012 15:03:24 GMT" porque todos os exemplos com hífens usam apenas 2 dígitos anos.

questionAnswers(3)

yourAnswerToTheQuestion