Войти на Facebook с помощью curl - PullRequest
0 голосов
/ 26 июня 2019

Мне нужно войти в Facebook с помощью curl.Я уже тестировал в браузере с условием отключить cookie, javascript и Opera mini 4 User-agent.Это логин успешно.с этим я проверяю с проверкой, что происходит в заголовке запроса и заголовках ответа.я уже проверюНа первом шаге facebook сгенерирует 4 случайных значения при вводе скрытого типа « lsd, jazoest, m_ts, li ».На втором шаге после публикации он будет перенаправлен на конкретное место сессией.Потому что я отключаю куки.так что я вижу, что Facebook переключается на сессию.после этого шага.я должен увидеть мою страницу графика времени.но ничего не происходит.это просто сообщение на страницу входа без указания местоположения.Объект httpConnect является оберткой от curl.

$headers = [
        'User-agent: Opera/9.80 (J2ME/MIDP; Opera Mini/4.0.10992/35.5561; U; hr) Presto/2.8.119 Version/11.10',
    ];

$facebook = new httpConnect('https://m.facebook.com/');

$facebook->setHeaders($headers);

$facebook->setOptions();

$facebook->sendRequest();

$sourceCode = $facebook->getResponse();

preg_match('/<input type="hidden" name="lsd" value="(.*?)" autocomplete="off" \/>/', $sourceCode, $lsd);

preg_match('/<input type="hidden" name="jazoest" value="(.*?)" autocomplete="off" \/>/', $sourceCode, $jazoest);

preg_match('/<input type="hidden" name="m_ts" value="(.*?)" \/>/', $sourceCode, $m_ts);

preg_match('/<input type="hidden" name="li" value="(.*?)" \/>/', $sourceCode, $li);

$data = [
    'lsd' => $lsd[1],
    'jazoest' => $jazoest[1],
    'm_ts'  => $m_ts[1],
    'li' => $li[1],
    'try_number' => 0,
    'unrecognized_tries' => 0,
    'email' => 'email',
    'pass' => 'password',
    'login' => 'Log In',
    '_fb_noscript' => 'true'
];

$options = [
    CURLOPT_POST            => TRUE,
    CURLOPT_POSTFIELDS      => $data,
    CURLOPT_FOLLOWLOCATION  => TRUE,
];

$facebook = new httpConnect('https://m.facebook.com/login/device-based/regular/login/?refsrc=https%3A%2F%2Fm.facebook.com%2F&amp;lwv=100&amp;refid=8');

$facebook->setHeaders($headers);

$facebook->setOptions($options);

$facebook->sendRequest();

echo $facebook->getResponse();

1 Ответ

1 голос
/ 26 июня 2019

Ваш логин-код даже не близок к завершению, сначала

, первый запрос к m.facebook.com для получения оригинального куки-файла требует заголовка accept-language (серьезно, он не будетпозвольте войти без языка принятия, странное дерьмо, вот что я использую: accept-language:en-US,en;q=0.8),

секунда, вы пытаетесь проанализировать HTML с помощью регулярных выражений, прекратить делать это , вместо этого вы должны использовать правильный анализатор HTML, PHP имеет несколько анализаторов HTML (включая DOMDocument, XMLReader, XMLParser, SimpleXml, ...), в-третьих, вы пытаетесь жестко закодировать параметры формы входа, не делайте этого, извлекайте их динамически, вы должны извлекать все элементы <input>, являющиеся потомками элемента login_form, динамически, добавлять их в ваш запрос на вход в систему и просто заполнять «email» и «pass»вводится вручную.

далее, иногда вы случайно получаете запрос на установку мобильного приложения facebook вместо входа в систему (это происходит не каждый раз, но, казалось бы, случайно), когда вы получаете этот вопрос, вы НЕОБХОДИМО ответить «да» или «нет», Facebook не позволит вам продолжить вход в систему, прежде чем ответить.вопрос может быть обнаружен путем поиска элемента <a> с href=, который содержит строку /login/save-device/cancel/, и вы можете ответить на not interested, выполнив простой запрос GET к href, указанному этим a-элементом.наконец, успешность входа в систему можно проверить, выполнив поиск a-элемента с href, содержащим /logout.php

. Пример кода входа в систему можно найти в конструкторе FacebookRelay проекта msgme, здесь: https://github.com/divinity76/msgme/blob/master/src/php/relays/facebook.relay.php

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