2014-10-30 3 views
0

웹 사이트에 로그인하려면 스크립트를 만들어야합니다. 그렇다면 로그인 페이지에서 CSRF 토큰을 가져 와서 로그인 작업 URL에 게시 할 것입니다. [허용 데이터 JSON이다.]페이지에서 CSRF 토큰 가져 오기 & POST it

이 로그인 방법 :

public function login() 
{ 
    $login = 'https://XXXXXXXXXXXXXXXXXXX'; 
    $csrf = $this->token(); 
    $data = array(
     "email" => '[email protected]', 
     "password" => '123456', 
     "displayType" => 'json', 
     "csrf" => $csrf 
    ); 
    $json = json_encode($data); 
    $ch = curl_init($login); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_HEADER, true); // For debugging purposes 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    $result = curl_exec($ch); 
    return $result; 
} 

그리고 여기 토큰 그래버 방법 :

public function token() 
{ 
    $source = $this->get("https://OOOOOOOOOOOOOOOOOOO"); 
    $dom = new DOMDocument(); 
    $dom->loadHTML($source); 
    $dxp = new DOMXpath($dom); 
    $csrf = $dxp->query('//input[@name="csrf"]/@value')->item(0)->value; 
    return $csrf; 
} 

토큰이 성공적으로 추출

있지만 내의 모든 호출 변경 같은 세션. ?! .

public function __construct($url) 
{ 
    if(session_status() == PHP_SESSION_NONE) 
     session_start(); 
    ... 
} 
+0

원격 사이트에 세션 ID가 전달되는 것을 보지 못하거나 URL에' $ login' 또는 전달할 헤더? – CBroe

답변

0

물론 $ this-> 호출 된 웹 사이트에서 얻을 (그리고 함수 로그인 사용 다른 "세션"당신이 세션과 쿠키를 저장하고 필요 재를 사용 : 나는 세션이 방법을 초기화하고 있습니다 getURL을 cURL로 다시 작성하고 다음 줄을 추가해야합니다 :

$cookie_path = 'mycookie.txt'; 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_path); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_path);