Получение содержимого удаленного файла после входа в систему с помощью cURL - PullRequest
0 голосов
/ 07 июля 2011

Как следует из названия, я пытаюсь вернуть содержимое (нескольких) страниц сайта, требующего входа в систему. Это законный логин, и у меня есть доступ к контенту - ничего не происходит.

Я искал SO и нашел несколько плакатов, пытающихся сделать то же самое - ничто из того, что я нашел, не помогло с этой конкретной проблемой.

Я пробовал несколько вариантов - добавление различных опций, таких как FOLLOWLOCATION (установлено значение true, затем попытался установить значение false); увеличение времени ожидания; настройка как COOKIEJAR, так и COOKIEFILE; вызов curl_close после входа в систему, затем новый curl_init после (до загрузки целевого файла); использование традиционных методов PHP для захвата файла (file_get_contents и т. д.); явное создание файла cookie и установка его для записи; пробовал с и без REFERER; попытался изменить REFERER; пробовал оба протокола http и https; сначала попытался вызвать curl_close, чтобы принудительно записать cookie, а затем сразу же после этого снова запустить блок скрипта; и т.д ... Не повезло.

Ниже приведен снимок используемого кода (на данный момент я пытаюсь получить только один файл).

Любые предложения будут оценены.

$e = curl_init();
curl_setopt($e, CURLOPT_URL, 'https://www.some-site.com/login.php');
curl_setopt($e, CURLOPT_POST, 1);
curl_setopt($e, CURLOPT_POSTFIELDS, 'username=bob&password=1234');
curl_setopt($e, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($e, CURLOPT_REFERER, 'https://www.some-site.com');
curl_setopt($e, CURLOPT_RETURNTRANSFER, 1);
curl_exec($e);

curl_setopt($e, CURLOPT_URL, 'https://www.some-site.com/posts.php?id=1');
$content = curl_exec($e);

print htmlentities($content);

curl_close($e); 

Фактической ошибки нет - cURL работает так, как должно, но для $ content установлена ​​страница "Вы не вошли в систему ... Пожалуйста, войдите сейчас ...".

После входа в систему через браузер (Fx, Chrome, Safari, IE) к каждому сообщению (снова через браузер) можно получить доступ без проблем.

Я в тупике.

TYIA для любых предложений - LMK, если какая-либо дополнительная информация будет полезна.

1 Ответ

2 голосов
/ 12 августа 2014

Это я использую для получения контента страницы после входа на сайт.

$login_url = 'http://www.examplesite.com/php/login.php';

//These are the post data username and password
$post_data = 'loginuser=smith&loginpass=sh20147';

//Create a curl object
$ch = curl_init();

//Set the useragent
$agent = $_SERVER["HTTP_USER_AGENT"];
curl_setopt($ch, CURLOPT_USERAGENT, $agent);

//Set the URL
curl_setopt($ch, CURLOPT_URL, $login_url );

//This is a POST query
curl_setopt($ch, CURLOPT_POST, 1 );

//Set the post data
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

//We want the content after the query
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);



//Follow Location redirects
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

/*
Set the cookie storing files
Cookie files are necessary since we are logging and session data needs to be saved
*/

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');

//Execute the action to login
$postResult = curl_exec($ch);
print_r($postResult);

После входа в систему теперь получите зарегистрированную страницу или определенное содержимое страницы следующим образом.

 $url = 'http://www.examplesite.com/members/home.php';


curl_setopt_array(
    $ch, array(
    CURLOPT_URL => $url ,
    CURLOPT_RETURNTRANSFER => true
));

$output = curl_exec($ch);
echo $output;

Подробнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...