我試圖用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