PHP CURL 및 MEGAVOIP으로 VoIP 전화를 걸려고합니다. 문제는 암호로 보호 된 페이지에 액세스하기 위해 세션을 관리 할 수 없다는 것입니다. 어떤 변수가 로그인 페이지에 게시되어 Curl과 함께 게시되는지 확인했습니다. 하지만 내 코드가 작동하지 않습니다. 콜린 모렐리 및 Waygood의 조언에 따라PHP CURL - 세션이 만료되었습니다.
은, 난 그냥 두 명령에서 그 라인을 추가 :
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;
?>
나를 도와 줄만한 아이디어가 있습니까?
테스트 계정이므로이 계정을보고 도움을 받으려면 내 로그인과 비밀번호를 자유롭게 사용하십시오!
미리 감사드립니다.
당신은 당신의 _second_ 요청에'COOKIEFILE'와'COOKIEJAR'를 설정해야합니다. 로그인 페이지에 대한 첫 번째 요청은 해당 파일에 쿠키가 _ 작성되도록합니다. 두 번째 요청은 해당 쿠키를 _read_ 할 수 있어야하며이를 서버로 보냅니다. –
너무 빠름 lol +1 curl_setopt ($ ch, CURLOPT_COOKIEFILE, $ cookies_file); 윗도니에서 누락되었습니다 – Waygood
@Waygood _full coverage_ 예를 위해서. 방금 체크를했고 기술적으로 말하자면 '쿠키 아이'는 쿠키가 쓰여지는 곳이고, '쿠키'는 그들이 읽히는 곳입니다. 하지만 그렇습니다. 안전하다고 생각하면 해를 입을 수 있습니다. +1. –