2013-03-18 5 views
3

Я пытаюсь сделать 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; 
?> 

Любые идеи, которые могут мне помочь?

Это тестовая учетная запись, поэтому не стесняйтесь использовать мой логин и пароль, если вы хотите взглянуть на это и помочь мне!

Большое вам спасибо.

+2

Вы должны установить 'COOKIEFILE' и' COOKIEJAR' в запросе _second_, а также. Ваш первый запрос (на страницу входа) приведет к тому, что файлы cookie будут _written_ в эти файлы. Второй запрос должен быть способен _read_ эти файлы cookie, а затем отправить их на сервер. –

+1

слишком быстрый lol +1 curl_setopt ($ ch, CURLOPT_COOKIEFILE, $ cookies_file); отсутствует в верхнем тоже – Waygood

+0

@Waygood Ради _full coverage_, да. Я только что проверил и * технически говоря * «COOKIEJAR» - это то, где написаны файлы cookie, и «COOKIEFILE» - это место, откуда они считываются. Но да, я бы сказал, что нет вреда, чтобы это было безопасно, +1. –

ответ

-1

Ok вам нужно переслать куки/сеанс после входа в систему,

вам нужно сначала извлечь печенье из заголовка после входа в систему, как следующий

// HERE I GET THE TOKEN 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_COOKIESESSION, true);  
.... .... 
.... .... 
$content = curl_exec($ch); 

preg_match('/^Set-Cookie:\s*([^;]*)/mi', $content, $m); 
parse_str($m[1], $cookies); 
$cookie = $cookies['NAMEOFCOOKIEUNEEDHERE']; 

После этого необходимости использовать переменную $ печенье в завиток такие как

// HERE I SEND THE VARIABLES 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
curl_setopt($ch, CURLOPT_COOKIE, 'NAMEOFCOOKIEUNEEDHERE='.$cookie); 

Надеюсь, ваша проблема будет решена.

Благодаря

Moin

+0

? и что?! ммм ... – Vixed

Смежные вопросы