Я пытаюсь сделать voip-вызов с PHP CURL и MEGAVOIP. Проблема в том, что я не могу управлять сеансом доступа к странице, защищенной паролем. Я посмотрел, какие переменные отправляются на страницу входа, чтобы опубликовать его с помощью Curl. Но мой код не работает.PHP CURL - Session expired
После Colin Морелла и советы ВЕЙГУДА, я просто добавил эти строки в обеих командах:
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies_file);
, но это все тот же:
Megavoip возвращается: Сессия истекла
Так вот мой полный код:
<?php
ini_set("display_errors", 1);
$username="***";
$password="***";
$url="https://www.megavoip.com/login";
$url2="https://www.megavoip.com/phone_to_phone/";
$timeout = 10;
$cookies_file = 'cookies.txt';
// HERE I GET THE TOKEN
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies_file);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$content = curl_exec($ch);
preg_match_all('/<input[^>]+>/i',$content, $result);
preg_match_all('/(id|value)=("[^"]*")/i',$result[0][5], $img);
$img1=str_replace('"', '', $img[0][0]);
$img2=str_replace('"', '', $img[0][1]);
$img1=substr($img1,3);
$img2=substr($img1,6);
$postdata = "login%5Busername%5D=".$username."&login%5Bpassword%5D=".$password."&page_referrer=login&".$img1."=".$img2;
// HERE I SEND THE VARIABLES
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies_file);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies_file);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$content = curl_exec($ch);
// IF LOGGED HERE I'LL MAKE THE CALL
curl_close($ch);
echo $content;
exit;
?>
Любые идеи, которые могут мне помочь?
Это тестовая учетная запись, поэтому не стесняйтесь использовать мой логин и пароль, если вы хотите взглянуть на это и помочь мне!
Большое вам спасибо.
Вы должны установить 'COOKIEFILE' и' COOKIEJAR' в запросе _second_, а также. Ваш первый запрос (на страницу входа) приведет к тому, что файлы cookie будут _written_ в эти файлы. Второй запрос должен быть способен _read_ эти файлы cookie, а затем отправить их на сервер. –
слишком быстрый lol +1 curl_setopt ($ ch, CURLOPT_COOKIEFILE, $ cookies_file); отсутствует в верхнем тоже – Waygood
@Waygood Ради _full coverage_, да. Я только что проверил и * технически говоря * «COOKIEJAR» - это то, где написаны файлы cookie, и «COOKIEFILE» - это место, откуда они считываются. Но да, я бы сказал, что нет вреда, чтобы это было безопасно, +1. –