2011-05-06 3 views
1

Je reçois une erreur sur le navigateur en disant:PHP Curl, erreur: Le navigateur doit prendre en charge les cookies de session?

HTTP/1.1 500 Internal Server Error Date: Ven 6 mai 2011 20:25:28 GMT Serveur: IBM_HTTP_SERVER/6.0.2.43 Apache/2.0.47 (Unix) $ WSEP: Set-Cookie: JSESSIONID = 0000HpGRXpuwrdY_u0k-ecHKAFK: 14ekdcv70; Path =/Connection: close Transfert-Encodage: chunked Type de contenu: text/html; charset = ISO-8859-1 Content-Language: en Erreur 500: Le navigateur doit supporter les cookies de session.

Comment résoudre ce problème?

ici ce que je faisais:

session_start(); 

$postData = http_build_query($_GET); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "\BuiltinObjectToken-VerisignClass3PublicPrimaryCertificationAuthority.crt"); 
    curl_setopt($ch, CURLOPT_URL, "https://zzzzzz.zzzzz.co.uk/zzz/zzzz/" . $form_link); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postDataCapcha); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookiefile"); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookiefile"); 
    curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id()); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $PagaeCapcha = curl_exec($ch); 

exit($PagaeCapcha); 

Répondre

1
Set-Cookie: JSESSIONID=0000HpGRXpuwrdY_u0k-ecHKAFK:14ekdcv70; Path=/ 

C'est l'en-tête de réponse qui initialement définit un cookie de session. Celui-ci ne sera pas stocké dans votre pot cookiefile. C'est un cookie temporaire, et vous le jetez.

Vous devrez d'abord émettre une demande de requête qui pointe vers l'adresse e-mail. page d'accueil Et seulement ensuite envoyer la demande de données réelle au point de terminaison désiré/zzz/zzzz /.

+0

Voulez-vous dire qu'il devrait être quelque chose comme ceci comme exemple: curl_setopt ($ ch, CURLOPT_COOKIEJAR, "0000HpGRXpuwrdY_u0k-ecHKAFK: 14ekdcv70"); SI non, pouvez-vous donner un exemple s'il vous plaît? – user622378

+0

Non. Ce n'est pas ce que je voulais dire. Mais pour mieux le résumer: appelez 'curl_exec()' deux fois. – mario

1

Le problème est que vous envoyez le nom de la session que votre copie de PHP a créé. Ce n'est certainement pas le nom de la session que le serveur .co.uk a créé. Donc, il voit que votre "navigateur" ne supporte pas les cookies - il essaye de définir un cookie de session nommé 'JSESSIONSID', mais vous renvoyez un cookie nommé 'PHP_SESSID' (ou autre).

+0

Oh je vois, alors qu'est-ce que je dois faire pour le résoudre? Dans la réponse de l'en-tête, il est dit que "JSESSIONID" a quelque chose à voir avec ça? – user622378

+0

Vous devez capturer le cookie que l'autre serveur vous envoie, et renvoyer celui-ci mot pour mot. Vous devrez peut-être diviser la demande en deux étapes - une pour obtenir le cookie de la session au départ, puis votre demande actuelle pour récupérer les données que vous voulez. –