У меня есть блог на WordPress, который настроен так, чтобы требовать входа в систему для просмотра любого содержимого на нем. Это внутренний инструмент, но мы хотели, чтобы он был доступен извне. Это работает, без проблем.
Но с этой настройкой, удачи в доступе к RSS-каналу.
Я полагаю, что это не должно быть ракетостроение, чтобы войти в систему с помощью curl, а затем запросить нужную страницу и вывести ее. Этот сценарий будет работать на внутреннем веб-сервере, поэтому вы можете получать RSS-канал внутри себя (чтобы пользователи, использующие Outlook, как и владелец, могли просматривать его при подключении к сети).
Я посмотрел целую кучу уроков и вопросов о том, как это сделать, но не повезло ( здесь a мало из их ). Кажется, ни у одного из них нет законченного сценария. Они все делают кусочки, я просто не могу, чтобы все работало вместе.
Вот что у меня есть:
$username='dummyUser';
$password='dummyPassword';
$url='http://url.wordpress.org/';
$postdata = 'log='. $username .'&pwd='. $password .'&wp-submit=Log%20In&redirect_to='. $url .'wp-admin/&testcookie=1';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url . 'wp-login.php');
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6');
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_REFERER, $url . 'wp-admin/');
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
$end = strpos($result, 'Content-Type');
$start = strpos($result, 'Set-Cookie');
$parts = split('Set-Cookie: ',substr($result, $start, $end-$start));
$cookies = array();
foreach ($parts as $co) {
$cd = split(';',$co);
if (!empty($cd[0]))
$cookies[] = $cd[0];
}
curl_setopt ($ch, CURLOPT_URL, $url . 'feed/');
curl_setopt ($ch, CURLOPT_COOKIE, implode(';',$cookies));
curl_setopt ($ch, CURLOPT_HEADER, 0);
$result = curl_exec ($ch);
echo $result;
Конечным результатом, который я получаю, является только отображаемый экран входа в систему, поэтому я предполагаю, что что-то не так с файлами cookie (я пытался следовать этому примеру ). Любой, кто увидит, чего мне не хватает, будет очень признателен.