2017-09-06 1 views
0

J'ai besoin d'aide pour faire un login comme celui montré dans l'image. (www.hurl.it) hurl.itConnexion avec cURL php Cookie

Cela devrait être fait en PHP avec cURL. C'est ce que j'ai à ce jour, mais ça ne marche pas pour moi:

$c = curl_init('https://www.mkr.cl/users/login?redirect=/store/product/22207'); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($c, CURLOPT_AUTOREFERER, 1); 
curl_setopt($c, CURLOPT_HEADER, 1); 
curl_setopt($c, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($c, CURLOPT_POST,true); 
curl_setopt($c, CURLOPT_POSTFIELDS, 'username=76696459-1&password=7669'); 
curl_setopt($c, CURLOPT_COOKIEJAR, 'cookies.txt'); 
curl_setopt($c, CURLOPT_COOKIEFILE, 'cookies.txt'); 
$result = curl_exec($c); 
curl_close($c); 
print_r($result); 
+0

Comment cela ne fonctionne-t-il pas spécifiquement? Avez-vous une erreur? En quoi le résultat diffère-t-il de ce que vous attendiez? – showdev

+0

Je ne l'ai pas confirmé, mais très probablement ils refusent de se connecter à quelqu'un sans un identifiant de session valide. Donc, tout d'abord, saisissez un identifiant de session depuis la page de connexion avec une requête GET, puis, lorsque vous avez un identifiant de session, faites la demande de connexion POST, avec l'identifiant de la session cookie. – hanshenrik

+0

edit: maintenant je l'ai vérifié, j'avais tort. Si vous essayez de vous connecter sans identifiant de session, vous obtiendrez 1 dans la requête POST elle-même, et vous serez connecté. En fait, votre code curl se connecte avec succès quand je le teste ici ... – hanshenrik

Répondre

1

votre code fonctionne correctement, et a en fait vous connecter, quand je TestRun ici. J'ai voté pour clore cette question, parce que tu dis juste "ça ne marche pas pour moi", sans expliquer comment ça ne marche pas pour toi. mais, lors du débogage, n'utilisez pas print_r, utilisez var_dump. Par exemple, si curl obtient une erreur, il renvoie bool (false), et quand vous donnez bool (false) à print_r, il n'imprime absolument rien, ce qui ne vous donne aucune idée de ce qui se passe. cependant, si vous donnez bool (false) à var_dump, il va en fait imprimer bool (false)

également, lors du débogage du code curl spécifiquement, activer CURLOPT_VERBOSE, il imprime beaucoup d'informations de débogage utiles. et lorsque curl_exec renvoie false, vous devez utiliser curl_error() pour extraire le message d'erreur. en bref, remplacer

$result = curl_exec($c); avec

curl_setopt($c,CURLOPT_VERBOSE,true); $result = curl_exec($c); if(false===$result){ throw new \RuntimeException('curl_exec failed! errno: '.curl_errno($c).'. error: '.curl_error($c)); } var_dump($result);

  • En outre, s'il y a un problème pour définir tout vos options de boucle, renvoie curl_setopt bool (faux), que vous ignorez aussi complètement ici, n » Je fais ça! utilisez quelque chose comme:

function ecurl_setopt (/*resource*/$ch , int $option , /*mixed*/ $value):bool{ $ret=curl_setopt($ch,$option,$value); if($ret!==true){ //option should be obvious by stack trace throw new RuntimeException ('curl_setopt() failed. curl_errno: ' . curl_errno ($ch).'. curl_error: '.curl_error($ch)); } return true; } - maintenant, au lieu d'ignorer silencieusement les erreurs setopt, une exception sera levée en cas de problème lors de l'application de vos paramètres. de toute façon, appliquez CURLOPT_VERBOSE, n'ignorez pas la valeur de retour setopt, et utilisez var_dump au lieu de print_r, et si cela ne fonctionne toujours pas, imprimez le journal VERBOSE et tout ce qui a été imprimé par CURLOPT_VERBOSE et var_dump et curl_error, ALORS je vais rétracter vote serré.