Ошибка входа на PHP / cURL (файл не найден)

#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 вместо предполагаемого. Вот откуда берется файл, который не найден