2017-01-18 2 views
1

http://www.domain.com/profile과 같은 페이지에 액세스하려고합니다. 작업 및 로그인 URL은 동일하므로 인증을 위해 쿠키를 http://www.example.com/cookies.txt에 저장하려고합니다. 여기에 내가 사용하고 코드입니다 : 컬 요청이 성공적으로 같은쿠키를 사용하여 cURL PHP 요청시 무단 액세스

$loginURL = 'http://www.domain.com/login'; 
$COOKIE_FILE = 'http://wwww.example.com/cookies.txt'; 
$postValues = array(
    'username' => 'myusername', 
    'password' => 'mypassword' 
); 
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $loginURL); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postValues)); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl, CURLOPT_COOKIEJAR, $COOKIE_FILE); 
curl_setopt($curl, CURLOPT_USERAGENT, 'Chrome/35.0.2309.372'); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_REFERER, $loginURL); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($curl); 
if(curl_errno($curl)){throw new Exception(curl_error($curl));} 

// now we are logged in, attempt to access a password-protected page 
curl_setopt($curl, CURLOPT_URL, 'http://www.domain.com/profile'); 
curl_setopt($curl, CURLOPT_COOKIEJAR, $COOKIE_FILE); 
curl_setopt($curl, CURLOPT_USERAGENT, USER_AGENT); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
echo curl_exec($curl); 

것 같다,하지만 난 "무단 액세스"라는 서버에서 페이지를 에코 얻고있다. 내 쿠키 시스템이 제대로 작동하고 있다고 생각하지 않습니까? 어떻게 확인할 수 있습니까? 어떻게 수정해야합니까?

답변

1

CURLOPT_COOKIEFILE을 CURLOPT_COOKIEJAR와 동일한 경로로 설정하십시오. curl은 파일에서 읽고 jar에 씁니다.

ETA : 스크립트가 작동하지 않는 이유 중 하나는 두 번째 요청에서 첫 번째 요청의 쿠키 데이터를 보내지 않았기 때문입니다.

+0

나는 이것을 시도했지만 작동하지 않았다. 'echo file_get_contents ($ COOKIE_FILE)'로 내 $ COOKIE_FILE 내용을 볼 수 있어야하지만 비어 있습니다. – Wagtail

+0

쿠키 데이터를 보내지 않음으로써 의미를 설명 할 수 있습니까? 내가 어떻게 그럴 수 있니? – Wagtail

+1

방금 ​​첫 번째 문장을 다시 말하려고했습니다. 파일에서 읽을 쿠키 파일이 필요합니다. 하지만 파일을 만들 수없는 이유를 모르겠습니다. 어쩌면 로컬 파일을 먼저 사용해 보시겠습니까? 또는 CURLOPT_VERBOSE를 CURLOPT_STDERR과 함께 사용하십시오. – jh1711

0

그래서 실제 로그인은 CAS를 통해 이루어 졌으므로 훨씬 복잡한 인증 프로세스가 필요했습니다. 그러나 위의 코드는 CURLOPT_COOKIEFILECURLOPT_COOKIEJAR을 잘못 사용하고 있었기 때문에 이러한 수정을 한 후 접근법을 재검토해야했습니다.

관련 문제