Получение дохода от веб-сайта с помощью PHP cURL - PullRequest
1 голос
/ 05 марта 2012

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

<?php
$username = "example";
$password = "example";
$postfields = "email=$username&password=$password";
// Use Curl to return the raw source of a webpage to a variable called 
$ch = curl_init();
//curl_setopt($ch, CURLOPT_HEADER, 1); // Get the header
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Allow redirection
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie");
curl_setopt($ch, CURLOPT_URL, "https://www.domain.com/login");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$postfields");

$page = curl_exec($ch);
curl_close($ch); // Closing

if (preg_match("/<th>(.*)<\/th/s", $page, $matches)) {
    echo $matches[1];
}
?>

По сути, я могу нормально пройти мимо входа в систему, и он перенаправляет меня на панель конкретного сайта, с которого я пытаюсь получить доход,однако, пытаясь использовать preg_match, он ничего не захватывает, он просто печатает весь HTML-код для панели инструментов.

Я пытаюсь получить только $ 99,99 в справке

<th>$99.99</th>

оценили.

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Добавьте к своему коду эту строку:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

.. иначе curl просто распечатывает результат своего сеанса. Я бы также предложил сделать ваше регулярное выражение нежадным: теперь это только один <th>, но эта часть кода может быть скопирована (как отлично работающая) в какую-то другую программу - и тогда возникнут проблемы. )

1 голос
/ 05 марта 2012

Ваше регулярное выражение является жадным, и, скорее всего, захватит содержимое нескольких <th>, если их более одного.Обычно не стоит пытаться анализировать HTML или XML с помощью регулярных выражений.Анализатор HTML выполнит эту задачу более эффективно.Я неравнодушен к DOMDocument .

Чтобы решить проблему, хотя, [^<]+ соберет все символы до, но не включая следующие <.

if (preg_match("/<th>([^<]+)<\/th/s", $page, $matches)) {
    echo $matches[1];
}

Используйте preg_match_all(), если у вас есть несколько <th> для извлечения, так как выше будет получено только первое.

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