#php #html #forms #curl
#php #HTML #формы #curl
Вопрос:
Я использую PHP и cURL для входа в систему через HTML-форму входа и захвата страницы, на которую она перенаправляет. К сожалению, я получаю сообщение «Файл не найден». Я не авторизован правильно, несмотря на предоставление правильной информации. Я проверил макет формы на lobby.cloudtrax.com чтобы убедиться, что я публикую все необходимые данные. Вы можете достичь только /vouchers/edit_vouchers.php если вы вошли в систему в противном случае, вы получите файл, который не найден.
$username = urlencode("xxxxx");
$password = urlencode("xxxxx");
$cloudtrax_base = "https://lobby.cloudtrax.com";
$loginurl = "vouchers/edit_vouchers.php";
$postdata = "account=".$username."amp;password=".$password."amp;edit=Login";
$cookie = "cloudtrax-cookie.txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $cloudtrax_base);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
//Execute the action to login
$postResult = curl_exec($ch);
if($postResult === FALSE) {
echo "cURL error:" . curl_error($ch);
}
curl_setopt($ch, CURLOPT_URL, "$cloudtrax_base/$loginurl");
$res = curl_exec($ch);
print_r($res);
curl_close($ch);
Используя HTTP-заголовки, я обнаружил, что как только curl регистрируется в нем, он перенаправляется наhttps://lobby.cloudtrax.com/vouchers/dashboard.php .
Но когда я вхожу в систему через браузер, используя того же пользователя / пароль, я перенаправляюсь наhttps://lobby.cloudtrax.com/vouchers/edit_vouchers.php это то, что я хочу скопировать
Комментарии:
1. какой URL выдает ошибку? Вы выполняете там ДВА запроса curl.
2. второй URL, я могу использовать необработанные HTML-данные, если я print_r ($postResult), но просто получаю файл, не найденный с помощью print_r ($ res)
3. lobby.cloudtrax.com/vouchers/edit_vouchers.php выдает
File not found
. Если при входе в систему вы получаете реальную страницу по этому URL, значит, вход в систему выполнен неудачно.4. lobby.cloudtrax.com/vouchers также
File not found
так что проверьте, существуют ли обе папки / файлы, если это фактические URL.5. @Fred-ii- страница существует, но доступ к ней возможен только в том случае, если вы вошли в систему. Вход в систему с помощью cURL не работает, и я не понимаю почему, вы можете проверить форму входа самостоятельно на lobby.cloudtrax.com
Ответ №1:
По какой-либо причине это не работает??
<?php
$username = "xxxx";
$password = "xxxx";
$name="test";
$voucher="zx9kjspo";
$duration = 4368;
$down = 4.5;
$up = 2;
$maxusers = 3;
$loginurl = "https://lobby.cloudtrax.com/lobby.php";
$voucherurl = "https://lobby.cloudtrax.com/vouchers/vouchers2.php";
exec("curl -s -L -e https://lobby.cloudtrax.com/lobby.php -c cloudtrax-lobby-cookies.txt -X POST -d 'account=" . urlencode($username) . "amp;password=" . urlencode($password) ."amp;edit=Login' $loginurl");
passthru("curl -s -o output.txt -e https://lobby.cloudtrax.com/vouchers/edit_vouchers.php -c cloudtrax-lobby-cookies.txt -b cloudtrax-lobby-cookies.txt -X POST -d 'voucher_code=" . urlencode($voucher) . "amp;comment=" . urlencode($name) . "amp;duration=" . urlencode($duration) . "amp;max_users=" . urlencode($maxusers) . "amp;downValue=" . urlencode($down) . "amp;upValue=" . urlencode($up) . "amp;valid=Hours Validamp;login=Login Codeamp;border=0amp;logo=0amp;submit=Create Vouchers' $voucherurl");
?>
Комментарии:
1. Похоже, у вас есть некоторый опыт работы с cloudtrax. Есть ли у вас эта реализация для работы с лобби нового стиля? Поскольку мое предыдущее решение теперь должно быть обновлено.
2. ДА. Все, что вам нужно сделать, это изменить loginurl на: lobby.cloudtrax.com/app/api/lobby_login.php
3. вы абсолютно правы! Слава богу, я думал, что это проблема с аутентификацией cookie, которая нарушила мое решение. Спасибо
Ответ №2:
Убедитесь, что вы ОТПРАВЛЯЕТЕ сообщение по фактическому URL-адресу входа и не полагаетесь на перенаправление (т. Е. включаете lobby.php
в URL-адрес входа):
$loginUrl = 'https://lobby.cloudtrax.com/lobby.php'; //action from the login form
$loginFields = array('account'=>'account', 'password'=>'pass', 'edit'=>'Login'); //login form field names and values
$voucherUrl = 'https://lobby.cloudtrax.com/vouchers/edit_vouchers.php';
$login = getUrl($loginUrl, $loginFields); //login to the site
$voucherPage = getUrl($voucherUrl); //get the voucher page
function getUrl($url, $postVars='') {
$ch = curl_init();
if (!empty($postVars)) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postVars);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cloudtrax-cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cloudtrax-cookie.txt');
$buffer = curl_exec($ch);
curl_close($ch);
return $buffer;
}
Комментарии:
1. Все тот же ответ. Есть ли способ отследить, на какие именно страницы он перенаправляет?
2. Обязательно через заголовки HTTP.
3. @c0le2 по какой-то причине cURL перенаправляется на vouchers/dashboard.php вместо предполагаемого. Вот откуда берется файл, который не найден