2013-03-18 115 views
3

我試圖用PHP CURL和MEGAVOIP進行VOIP呼叫。 問題是我無法管理會話訪問受密碼保護的頁面。 我查看哪些變量發佈到登錄頁面以使用Curl發佈。 但我的代碼不起作用。PHP CURL - 會話過期

繼科林·莫雷利和Waygood的意見,我只是說在這兩個命令的那些行:

curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies_file); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies_file); 

,但它仍然是相同的:

Megavoip回報:session過期

因此,這裏是我的完整代碼:

<?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被寫入這些文件。您的第二個請求需要能夠讀取這些cookie,然後將它們發送到服務器。 – 2013-03-18 13:14:52

+1

太快了大聲笑+1 curl_setopt($ ch,CURLOPT_COOKIEFILE,$ cookies_file);從頂部一個也失蹤 – Waygood 2013-03-18 13:15:36

+0

@Waygood爲了_full coverage_,是的。我只是查了一下,從技術上說* COOKIEJAR是寫入cookie的地方,而'COOKIEFILE'是讀取它們的地方。但是,是的,我認爲這樣做是安全的,沒有任何傷害。 – 2013-03-18 13:19:12

回答

-1

好吧,你需要轉發登錄後的cookie /會話,

你需要先提取頭餅乾登錄後像下面

// 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']; 

需要使用$ cookie變量在捲曲後像這樣的選項

// HERE I SEND THE VARIABLES 

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

我希望你的問題得到解決。

感謝

莫恩

+0

?什麼?!嗯... – Vixed 2016-05-16 14:04:01