Парсинг веб-сайта с входом OAuth с использованием PHP CURL - PullRequest
0 голосов
/ 07 мая 2020

Я пишу задание cron для сервера для очистки данных с веб-сайта на языке PHP. Страница является обязательной, пользователь должен войти на сайт с помощью Google reCaptcha или с помощью OAuth Login с Facebook, Twitter или Google.

Я думаю, что обойти Google reCaptcha при входе в систему так сложно, поэтому я попытался написать код вот так:

function loginSite()
{
    global $config;
    $data = openPageWithCurl($config['loginPage']); // Return the result of CURL with cookies / userAgent
    $dom = new simple_html_dom();
    $domData = $dom->load($data);
    $nodes = $domData->find("a");

    $twitterLogin = "";
    foreach ($nodes as $node) {
        $name = $node->href;
        if(strpos($name,'twitter')){
            $twitterLogin = $name;
        }
    }
...
// Setting the website login credential
// Login Twitter
// Redirect back to TargetWebsite
...
...

}

Тогда я получаю $twitterLoggin = "/sothing/twitter/?timestamp=******&&authorization=***........." Однако curl не может получить доступ к странице входа в Twitter ($config['baseURL'].$twitterLogin). Ошибка - страница не найдена. Итак, я попытался проверить, что здесь не так.

Во-первых, я обнаружил, что на странице входа будет запущен некоторый клиентский скрипт (javascript), который запускает Google recaptcha и добавляет какой-то параметр в URL. Это означает, что URL-адрес будет изменен с http://www.example.com/login на http://www.example.com/login?someParameter={somthing encrypted}&&somethingelse={encrypted too}.

Я думаю, что причина, по которой curl не может получить доступ, заключается в том, что URL-адрес входа в Twitter будет проверять, какая страница перенаправляется на страницу входа. curl не отправляется с реальной страницы входа или в URL-адресе страницы входа отсутствует параметр.

Вот некоторые решения, но я не знаю, как его завершить. sh это.

A) Получите окончательный URL-адрес / местоположение со стороны клиента и добавьте его обратно в функцию curl.

B) Использование других вещей для имитации клиентского браузера может выполнить вход в систему и вернуть html содержимое. Может быть python или node.js или какая-нибудь библиотека умеет?

Кто-нибудь может мне посоветовать?

...