Сохранение ответа входа в систему с помощью curl? - PullRequest
0 голосов
/ 05 марта 2012

Я вошел на веб-сайт, используя URL, имя пользователя и пароль, используя curl. Основной вопрос заключается в том, что я хочу получить ответ и сохранить его в сценарии php, что сайт был зарегистрирован или нет?

Хранение ответа, то есть вход в систему или неудачный вход в скрипт php - это главный вопрос?Я дал сценарий ниже, вы можете сказать мне, что добавить?

Заранее спасибо

<?php

$cookiefile = tempnam("/tmp", "cookies");

$login_url='**********';


$login_post_url='*********';


$username = "*****";
$password = "*****";

$agent="Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 ";


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$login_url);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec ($ch);


curl_close ($ch);



$postfields = array(
        'j_username' => $username,
        'j_password' => $password,
    );

$reffer = $login_url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$login_post_url);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
       http_build_query($postfields));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_REFERER, $reffer);


curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);


curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$result = curl_exec ($ch);
 echo $result;

curl_close ($ch);


unlink($cookiefile);
?>

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Сохранение ответа, т. Е. Вход в систему или сбой входа в систему в сценарии php - это главный вопрос?

Это должно быть сохранено в логическом значении при успехе вместе с сопровождающим кодом HTTP.

РЕДАКТИРОВАТЬ:

Вы можете использовать это во втором вызове cURL при входе в систему.

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$loginSuccess = $httpCode >= 200 && $httpCode < 400;

Это также будет принимать перенаправления после входа в систему.

1 голос
/ 05 марта 2012

просто проверьте с помощью strpos(...) или preg_match(...), присутствует ли в ответе определенный шаблон / строка (сохраненная в curl_exec($ch)).

, после этого просто сохраните имя файла cookie, который вы используете.используя, и вам не нужно будет снова входить в систему, когда вы снова запустите этот скрипт.

Скажем, текст (часть ответа) - Login successful, тогда вы можете сказать:

$login_successful = strpos($response, "Login successful") !== FALSE;

или если вас не волнует чувствительность к регистру

$login_successful = strpos(strtolower($response), "login successful") !== FALSE;

надеюсь, что это поможет!

0 голосов
/ 05 марта 2012

Если вы обращаетесь к авторизации HTTP / 401 и входите через curl (вместо POST в форму), вы либо получите HTTP / 401 снова в случае неудачи, либо HTTP / 200 в случае успеха.

Если «завиток» управляется сценарием PHP, я предлагаю вам инициировать HTTP-запрос непосредственно внутри PHP, используя, скажем, HTTP_Request от pear.

...