Войти на определенную страницу WordPress с помощью cURL - PullRequest
3 голосов
/ 19 января 2012

У меня есть блог на 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 (я пытался следовать этому примеру ). Любой, кто увидит, чего мне не хватает, будет очень признателен.

1 Ответ

2 голосов
/ 14 февраля 2012

Попробуйте следующее:

curl_setopt($ch, CURLOPT_COOKIESESSION, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...