我试图用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;
?>
任何想法帮助我?
这是一个测试帐户,所以请随时使用我的登录名和密码,如果你想看看这个并帮助我!
非常感谢您提前。
您需要设置'COOKIEFILE'和'COOKIEJAR'在_second_的要求也是如此。您的第一个请求(登录页面)将导致cookie被写入这些文件。您的第二个请求需要能够读取这些cookie,然后将它们发送到服务器。 – 2013-03-18 13:14:52
太快了大声笑+1 curl_setopt($ ch,CURLOPT_COOKIEFILE,$ cookies_file);从顶部一个也失踪 – Waygood 2013-03-18 13:15:36
@Waygood为了_full coverage_,是的。我只是查了一下,从技术上说* COOKIEJAR是写入cookie的地方,而'COOKIEFILE'是读取它们的地方。但是,是的,我认为这样做是安全的,没有任何伤害。 – 2013-03-18 13:19:12