2010-08-20 8 views
2

J'écris une "API" pour un site web qui ne l'a pas. Fondamentalement, mon code PHP se connecte au site Web et saisit les données dont j'ai besoin (deux transferts différents).Utilisation de cookies avec CURL

Au moment de la connexion, je commence à avoir un problème. Le site Web définit quelques cookies via HTTP, que je capture en utilisant le mécanisme de cookie de CURL. Cela semble bien fonctionner, sauf qu'ils essaient également de définir un cookie via javascript dans la même réponse.

Je n'ai pas besoin d'analyser le javascript car le cookie qu'ils ont défini est entièrement prévisible. Ce dont j'ai besoin, c'est de dire en quelque sorte à CURL que ce cookie existe, PENDANT qu'il conserve les autres cookies.

Aide? :)


Après avoir soumis les informations de connexion via Flexion, je reçois à ces en-têtes:

HTTP/1.1 200 OKDate: Fri, 20 Aug 2010 09:39:14 GMT 
Server: Apache-Coyote/1.1 
Content-Type: text/html;charset=ISO-8859-1 
Content-Length: 492 
Set-Cookie: JSESSIONID=5DE1F32B3668DABB408BBEA10C28DBD5.testmmf1; Path=/merchantlogin 
Set-Cookie: loginType=M 
Connection: close 

Et c'est le contenu de la page:

<script type="text/javascript"> 
    var nextyear = new Date(); 
    nextyear.setFullYear(nextyear.getFullYear() + 1); 
    document.cookie = 'login=' + document.referrer + '; expires=' + nextyear.toGMTString(); 
</script> 

Notez que le Set- Cookie et document.cookie parties.

+0

Situation très étrange, pouvez-vous montrer un code source? – Otar

+0

Bien sûr! Donne-moi une seconde ... – Christian

Répondre

1

génèrera un fichier cookie via le code, et avant de faire la demande à l'endroit sorcière exige ce cookie ajouter simplement par setopt avec option CURLOPT_COOKIEFILE

+0

Je pense que je corrige ça comme ça ... – Christian

+0

Vous pouvez mélanger les choses, recevoir le premier cookie, le fusionner avec celui généré, et à la prochaine demande envoyer cookie fusionné – canni

0

Vous pouvez définir le cookie en utilisant curl_setopt et l'option CURLOPT_COOKIEpremier. Bien sûr, cela effacera vos autres cookies, mais ils seront récupérés, n'est-ce pas?

Si vous pouviez obtenir la valeur actuelle de CURLOPT_COOKIE, vous pouvez ajouter votre cookie avec un point-virgule. Mais PHP ne semble pas avoir une fonction curl_getopt.

+0

Comme je l'ai dit ci-dessus , le problème est d'envoyer les cookies existants au nouveau, en même temps, au serveur cible. – Christian