Я пытаюсь получить доступ к странице, скажем http://www.domain.com/profile
, URL действия и логин совпадают, и я пытаюсь сохранить куки в 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);
Кажется, что запросы curl успешны, но я получаю эхом страницу с сервера, на которой написано «Несанкционированный доступ». Я не думаю, что моя система куки работает правильно? Как я могу это проверить? Как мне это исправить?
Установите для CURLOPT_COOKIEFILE тот же путь, что и для CURLOPT_COOKIEJAR. curl читает из файла и пишет в jar.
ETA: одна из вероятных причин, по которой ваш скрипт не работает, заключается в том, что вы не отправляете данные cookie из первого запроса во втором запросе.
Таким образом, фактическим ответом было то, что вход в систему осуществлялся через CAS, что требует гораздо более сложного процесса аутентификации. Тем не менее, мой код выше неправильно использовал CURLOPT_COOKIEFILE
а также CURLOPT_COOKIEJAR
Итак, после того, как я сделал эти исправления, я обнаружил, что мне нужно переделать подход.