2013-03-18 117 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