2017-02-19 2 views
3

Я хочу очистить некоторые страницы компании LinkedIn с помощью cURL и PHP. API LinkedIn для этого не создан, поэтому я должен сделать это с помощью PHP. Если есть другие варианты, пожалуйста, дайте мне знать ...Как я могу очистить страницы компании LinkedIn с помощью cURL и PHP? Нет токена CSRF, найденного в заголовке ошибки

Прежде чем соскабливать страницу компании, я должен войти в LinkedIn с личным аккаунтом через cURL, но он не работает.

У меня есть знак «Нет CSRF-токена, найденного в ошибке заголовков».

Может ли кто-нибудь помочь мне?

Спасибо!

<?php 

require_once 'dom/simple_html_dom.php'; 

$linkedin_login_page = "https://www.linkedin.com/uas/login"; 

$username = 'linkedin_username'; 
$password = 'linkedin_password'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $linkedin_login_page); 
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17'); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 

$login_content = str_get_html(curl_exec($ch)); 

if(curl_error($ch)) { 
    echo 'error:' . curl_error($ch); 
} 

if ($login_content) { 

    if (($login_content->find('input[name=isJsEnabled]', 0))) { 
    foreach($login_content->find('input[name=isJsEnabled]') as $element) { 

     $isJsEnabled = trim($element->value); 

     if ($isJsEnabled === "false") { 
     $isJsEnabled = "true"; 
     } 

    } 
    } 

    if (($login_content->find('input[name=source_app]', 0))) { 
    foreach($login_content->find('input[name=source_app]') as $element) { 
     $source_app = trim($element->value); 
    } 
    } 

    if (($login_content->find('input[name=tryCount]', 0))) { 
    foreach($login_content->find('input[name=tryCount]') as $element) { 
     $tryCount = trim($element->value); 
    } 
    } 

    if (($login_content->find('input[name=clickedSuggestion]', 0))) { 
    foreach($login_content->find('input[name=clickedSuggestion]') as $element) { 
     $clickedSuggestion = trim($element->value); 
    } 
    } 

    if (($login_content->find('input[name=session_redirect]', 0))) { 
    foreach($login_content->find('input[name=session_redirect]') as $element) { 
     $session_redirect = trim($element->value); 
    } 
    } 

    if (($login_content->find('input[name=trk]', 0))) { 
    foreach($login_content->find('input[name=trk]') as $element) { 
     $trk = trim($element->value); 
    } 
    } 

    if (($login_content->find('input[name=loginCsrfParam]', 0))) { 
    foreach($login_content->find('input[name=loginCsrfParam]') as $element) { 
     $loginCsrfParam = trim($element->value); 
    } 
    } 

    if (($login_content->find('input[name=fromEmail]', 0))) { 
    foreach($login_content->find('input[name=fromEmail]') as $element) { 
     $fromEmail = trim($element->value); 
    } 
    } 

    if (($login_content->find('input[name=csrfToken]', 0))) { 
    foreach($login_content->find('input[name=csrfToken]') as $element) { 
     $csrfToken = trim($element->value); 
    } 
    } 

    if (($login_content->find('input[name=sourceAlias]', 0))) { 
    foreach($login_content->find('input[name=sourceAlias]') as $element) { 
     $sourceAlias = trim($element->value); 
    } 
    } 

} 

curl_setopt($ch, CURLOPT_URL, "https://www.linkedin.com/uas/login-submit"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'isJsEnabled='.$isJsEnabled.'&source_app='.$source_app.'&tryCount='.$tryCount.'&clickedSuggestion='.$clickedSuggestion.'&session_key='.$username.'&session_password='.$password.'&session_redirect='.$session_redirect.'&trk='.$trk.'&loginCsrfParam='.$loginCsrfParam.'&fromEmail='.$fromEmail.'&csrfToken='.$csrfToken.'&sourceAlias='.$sourceAlias); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$store = curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL, 'https://www.linkedin.com/company/facebook'); 
curl_setopt($ch, CURLOPT_POST, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, ""); 
$content = curl_exec($ch); 
curl_close($ch); 

echo $content; 

?> 
+0

Ваш вопрос, вероятно, будет закрыт, потому что не очень понятно, что вы просите, и код, который вы предоставили, на самом деле не ссылается на ваш вопрос, и не задаются конкретные вопросы. НО вы должны взглянуть на эту платформу для очистки веб-сайта Python под названием [Scrapy] (https://scrapy.org/), она упрощает извлечение контента с веб-сайтов и даже позволяет вам регистрировать скребки в LinkedIn, чтобы вы могли просмотр содержимого. Удачи. –

+0

Hi Noah, Спасибо, что упомянул Scrapy. Я думаю, что мой вопрос довольно ясен; Как я могу очистить страницы компании LinkedIn с помощью cURL и PHP? –

+0

Попробуйте задать более конкретные вопросы, cURL и PHP - это два огромных инструментария/технологии. Попытайтесь уточнить, что вы сделали и что именно не работает. –

ответ

1

Вот решение для входа в систему, если вы хотите, чтобы убедиться, что работает только сохранить содержимое в файле, и вы увидите, что Войти был успешно

вместо simple_html_dom мы использовали выше fetch_value, вы все еще можете использовать simple_html_dom

<?php 
function fetch_value($str, $find_start = '', $find_end = '') 
{ 
    if ($find_start == '') 
    { 
     return ''; 
    } 
    $start = strpos($str, $find_start); 
    if ($start === false) 
    { 
     return ''; 
    } 
    $length = strlen($find_start); 
    $substr = substr($str, $start + $length); 
    if ($find_end == '') 
    { 
     return $substr; 
    } 
    $end = strpos($substr, $find_end); 
    if ($end === false) 
    { 
     return $substr; 
    } 
    return substr($substr, 0, $end); 
} 

$linkedin_login_page = "https://www.linkedin.com/uas/login"; 
$linkedin_ref = "https://www.linkedin.com"; 

$username = 'username'; 
$password = 'password'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $linkedin_login_page); 
curl_setopt($ch, CURLOPT_REFERER, $linkedin_ref); 
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7)'); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); 


$login_content = curl_exec($ch); 


if(curl_error($ch)) { 
    echo 'error:' . curl_error($ch); 
} 

$var = array(
      'isJsEnabled' => 'false', 
      'source_app' => '', 
      'clickedSuggestion' => 'false', 
      'session_key' => trim($username), 
      'session_password' => trim($password), 
      'signin' => 'Sign In', 
      'session_redirect' => '', 
      'trk' => '', 
      'fromEmail' => ''); 
     $var['loginCsrfParam'] = fetch_value($login_content, 'type="hidden" name="loginCsrfParam" value="', '"'); 
     $var['csrfToken'] = fetch_value($login_content, 'type="hidden" name="csrfToken" value="', '"'); 
     $var['sourceAlias'] = fetch_value($login_content, 'input type="hidden" name="sourceAlias" value="', '"'); 

     $post_array = array(); 
      foreach ($var as $key => $value) 
      { 
       $post_array[] = urlencode($key) . '=' . urlencode($value); 
      } 
     $post_string = implode('&', $post_array); 

curl_setopt($ch, CURLOPT_URL, "https://www.linkedin.com/uas/login-submit"); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); 

$store = curl_exec($ch); 


if (stripos($store, "session_password-login-error") !== false){ 
    $err = trim(strip_tags(fetch_value($store, '<span class="error" id="session_password-login-error">', '</span>'))); 
    echo "Login error : ".$err; 
}elseif (stripos($store, 'profile-nav-item') !== false) { 
     curl_setopt($ch, CURLOPT_URL, 'https://www.linkedin.com/company-beta/10667/?pathWildcard=10667'); 
     curl_setopt($ch, CURLOPT_POST, false); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, ""); 
     $content = curl_exec($ch); 
     curl_close($ch); 

     echo $content; 
}else{ 
    echo "unknown error"; 
} 


?> 

вы заметите, что страница компании не загружается, так как только LinkedIn изменили свой дизайн и их связи компании сохранить отслеживание открыты компаниями страниц.

+0

Спасибо, это работает! Данные страниц компании находятся в источнике, поэтому вы можете очистить их ... Является ли прокси-сервер и поддельная учетная запись? –

+0

Да, я рекомендую использовать только фальшивую учетную запись, так как она может быть закрыта – Faxsy

+1

Привет, я попытался реализовать ваш код, но он возвращает ошибку «Для доступа к этой странице вам необходимо пройти аутентификацию». после ввода начала блока из строки № 84 вашего кода –

0

Вместо того, чтобы пытаться очистить логин, просто войдите в свой браузер и скопируйте файл cookie сеанса в свой скрипт curl. Это будет трюк, связанный с мыслью, что это только вы в своем веб-браузере. Иногда веб-серверы достаточно умен, чтобы смотреть на другие заголовки, переданные как тип браузера, и аннулировать запрос, если это так, просто убедитесь, что вы устанавливаете те же заголовки в своем curl-скрипте, что и браузер, к которому вы используете для входа. Дайте мне знать, если вам нужно, чтобы я объяснил, как это сделать.

+0

Спасибо Майку за то, что он помог мне ... Я не совсем понимаю, что вы имеете в виду. Вы имеете в виду, что я могу хранить файл cookie 'JSESSIONID' LinkedIn в моем локальном браузере для моего скрипта? Не могли бы вы объяснить мне, как это сделать? Это также работает на другом сервере вместо локального? –

+0

Поскольку OP уже получает знак «Нет CSRF-токена, найденного в заголовках», я очень сомневаюсь, что это сработает. Этот метод, во всех практических целях, является атакой CSRF! Поэтому, если у них есть защита CSRF, она должна прекратить этот подход. – Adam

+0

@Adam, вы должны проверить мой ответ выше, CSRF был обойден и процесс входа в систему прошел хорошо. – Faxsy

Смежные вопросы