cURL PHP请求cookie时未经授权的访问

时间:2017-01-18 21:20:27

标签: php authentication curl cookies login

我正在尝试访问某个网页,例如http://www.domain.com/profile。操作和登录URL是相同的,我正在尝试将cookie保存到http://www.example.com/cookies.txt进行身份验证。这是我正在使用的代码:

$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);

好像卷曲请求成功了,但我收到来自服务器的一个页面回复说“未经授权的访问”。我不认为我的cookie系统工作正常吗?我该怎么检查?我该如何解决?

2 个答案:

答案 0 :(得分:1)

将CURLOPT_COOKIEFILE设置为与CURLOPT_COOKIEJAR相同的路径。 curl从文件中读取并写入jar。

ETA:您的脚本无法正常工作的一个原因是您没有在第二个请求中发送第一个请求的Cookie数据。

答案 1 :(得分:0)

所以实际答案是登录是通过CAS进行的,这需要更复杂的身份验证过程。但是,我上面的代码使用CURLOPT_COOKIEFILECURLOPT_COOKIEJAR是不正确的,所以在我做了这些修补后,我发现我需要对方法进行修改。