2009-05-09 8 views
3

Je suis en train de se connecter automatiquement à www.meetup.com sans grand succès: -Connexion à meetup.com avec Curl

Voici mon code: -

 <? 
$username="[email protected]"; 
$password="123abc"; 
$url="http://meetup.com"; 
$cookie="cookie.txt"; 

$postdata = "email=". $username ."&password=". $password . "&submitButton=Login"; 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url . "/login"); 

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 0); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, "http://www.meetup.com/"); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 
curl_close($ch); 
echo $result; 

exit; 
?> 

Pas de joie - des idées?

Merci

Jonathan

Répondre

3

ils peuvent être vous remettre un cookie de session lors de la première pageload

essayer de faire une demande avec CURLOPT_COOKIEJAR puis faire la demande de connexion à l'aide CURLOPT_COOKIEFILE et CURLOPT_COOKIEJAR

aussi pour le diable, c'est une fonction que je fais pour rendre les demandes plus propres

function curl_http_request ($url, $options) 
{ 
    $handle = curl_init($url); 
    curl_setopt_array($handle, $options); 
    ob_start(); 
    $buffer = curl_exec($handle); 
    ob_end_clean(); 
    curl_close($handle); 
    return $buffer; 
} 

exemple d'utilisation

$options = array(
    CURLOPT_RETURNTRANSFER => TRUE 
); 

curl_http_request($url, $options); 

cela devrait fonctionner

// set global curl options 
$curloptions = array(
     CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6', 
     CURLOPT_TIMEOUT => 60, 
     CURLOPT_COOKIEJAR => $cookie, 
     CURLOPT_COOKIEFILE => $cookie, 
     CURLOPT_REFERER => 'http://www.meetup.com/' 
); 

// set userinfo 
$username = '[email protected]'; 
$password = '[email protected]'; 
$cookie = 'cookie.txt'; 

// clear cookie.txt (fresh session) 
$handle = fopen($cookie, 'w'); 
fclose($handle); 

// make a dummy request to generate a session 
curl_http_request('http://www.meetup.com/login/', $curloptions); 

// login 
curl_http_request('http://www.meetup.com/login/', 
    array(
     CURLOPT_POSTFIELDS => 'email=' . urlencode($username) . '&password=' . urlencode($password) . '&rememberme=on&submitButton=Login&returnUri=http%3A%2F%2Fwww.meetup.com%2F&op=login', 
     CURLOPT_POST => TRUE 
    ), $curloptions 
); 

//example request 
echo curl_http_request('http://www.meetup.com/account/', 
    array(
     CURLOPT_FOLLOWLOCATION => TRUE, 
     CURLOPT_RETURNTRANSFER => TRUE 
    ), $curloptions 
); 

function curl_http_request ($url, $moreoptions = array(), $options = array()) 
{ 
    foreach ($moreoptions as $k => $v) $options[$k] = $v; 
    $handle = curl_init($url); 
    curl_setopt_array($handle, $options); 
    ob_start(); 
    $buffer = curl_exec($handle); 
    ob_end_clean(); 
    curl_close($handle); 
    return $buffer; 
} 

espoir celui-ci fonctionne :)

+0

Merci Chad, j'ai essayé (au moins je pense que je l'ai fait correctement) d'ajouter la ligne que vous avez suggérée mais pas de joie. Je serais très reconnaissant si vous pouvez peut-être essayer par vous-même avec www.meetup.com et laissez-moi savoir si vous pouvez le faire fonctionner. Merci beaucoup! –

+0

ci-dessus fonctionne pour moi, comme je l'ai dit, ils utilisent une session. Donc, pour vous connecter avec succès, vous devrez faire une demande de page factice avec le jeu de fichiers CURLOPT_COOKIEJAR pour que le site vous donne des cookies de session. Ensuite, publiez un login. :) –

+0

Salut Tchad - génial! Cela a fonctionné un régal avec un problème plutôt petit. lorsque j'essaie de naviguer vers une autre page, la connexion est perdue. Y at-il un moyen de conserver l'état de connexion? Par exemple, je lance le script de http/mydomain.com/testlogin.php qui est réussi et affiche la page meetup mais si je clique sur un lien, il va à http://meetup.com/link-I-clicked mais pas avec moi connecté. Des idées? J'apprécie vraiment l'aide! –

2

S'il vous plaît utiliser $url=https://secure.meetup.com et remplacer la ligne curl_setopt ($ch, CURLOPT_REFERER, "http://www.meetup.com/"); par curl_setopt ($ch, CURLOPT_REFERER, "");

Il travaillera ...