За последние 24 часа нас посетили 19347 программистов и 1615 роботов. Сейчас ищут 867 программистов ...

Авторизация через cURL на hh.ru – как?

Тема в разделе "PHP для новичков", создана пользователем TrogWar, 27 мар 2014.

  1. TrogWar

    TrogWar Активный пользователь

    С нами с:
    20 окт 2012
    Сообщения:
    40
    Симпатии:
    0
    Адрес:
    Ленинград
    Доброго времени суток!

    В наличии php 5.4, apache 2.4, мой личный аккаунт на hh.ru.

    Задача: получить доступ к страницам hh.ru из-под авторизованного пользователя. Никакого взлома или чужих аккаунтов не нужны – авторизация под своим собственным аккаунтом.

    Пробовал решить так:
    Код (PHP):
    1. <?php
    2.  
    3. // ================================================== Config script ====================================================
    4. ini_set('display_errors', true);
    5. ini_set('track_errors', true);
    6. ini_set('error_reporting', E_ALL);
    7. ini_set('display_startup_errors', true);
    8. ini_set('report_memleaks', true);
    9. ini_set('html_errors', true);
    10.  
    11. define('DIR_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
    12.  
    13. $config = [
    14.     'host'      => 'http://spb.hh.ru/',
    15.     'cookie'    => DIR_ROOT . 'cookie.txt',
    16.     'username'  => 'foobar@gmail.com',
    17.     'password'  => 'blowfish',
    18. ];
    19.  
    20. // ================================================== Global cURL config ===============================================
    21.  
    22. $ch = curl_init();
    23.  
    24. // Global prefs
    25. $curlOptGlobal = [
    26.     CURLOPT_AUTOREFERER         => 1,
    27.     CURLOPT_COOKIEFILE          => $config['cookie'],
    28.     CURLOPT_COOKIEJAR           => $config['cookie'],
    29.     CURLOPT_COOKIESESSION       => true,
    30.     CURLOPT_FAILONERROR         => 1,
    31.     CURLOPT_FOLLOWLOCATION      => true,
    32.     CURLOPT_HEADER              => false,
    33.     CURLOPT_HTTPHEADER          => ['Expect:'],
    34.     CURLOPT_REFERER             => 'https://hh.ru/logon.do',
    35.     CURLOPT_RETURNTRANSFER      => true,
    36.     CURLOPT_SSL_VERIFYHOST      => 0,
    37.     CURLOPT_SSL_VERIFYPEER      => 0,
    38.     CURLOPT_TIMEOUT             => 999,
    39.     CURLOPT_UNRESTRICTED_AUTH   => true,
    40.     CURLOPT_USERAGENT           => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36',
    41. ];
    42. curl_setopt_array($ch, $curlOptGlobal);
    43.  
    44. // ================================================== Do auth =======================================================
    45.  
    46. // Verify
    47. $curlOptVerify = [
    48.     CURLOPT_URL => 'http://hhid.ru/validate/;http;hh.ru;80;/',
    49. ];
    50. curl_setopt_array($ch, $curlOptVerify);
    51. curl_exec($ch);
    52. $resultVerify = (curl_errno($ch)) ? curl_error($ch) : curl_exec($ch);
    53.  
    54. // Go to page
    55. $curlOptPage = [
    56.     CURLOPT_URL => 'http://hh.ru/',
    57. ];
    58. curl_setopt_array($ch, $curlOptPage);
    59. curl_exec($ch);
    60. $resultPage = (curl_errno($ch)) ? curl_error($ch) : curl_exec($ch);
    61.  
    62. // Do auth
    63. $curlOptAuth = [
    64.     CURLOPT_URL         => 'https://hh.ru/logon.do',
    65.     CURLOPT_POST        => true,
    66.     CURLOPT_POSTFIELDS  => [
    67.         'username'  => $config['username'],
    68.         'password'  => $config['password'],
    69.         'remember'  => 'on',
    70.         'action'    => 'Войти в личный кабинет',
    71.     ],
    72. ];
    73. curl_setopt_array($ch, $curlOptAuth);
    74. curl_exec($ch);
    75. $resultAuth = (curl_errno($ch)) ? curl_error($ch) : curl_exec($ch);
    76.  
    77. // Go to page again
    78. $curlOptPageAgain = [
    79.     CURLOPT_URL     => 'http://hh.ru/',
    80.     CURLOPT_POST    => false,
    81. ];
    82. curl_setopt_array($ch, $curlOptPageAgain);
    83. curl_exec($ch);
    84. $resultPageAgain = (curl_errno($ch)) ? curl_error($ch) : curl_exec($ch);
    85.  
    86.  
    87. // ================================================== Output results ===================================================
    88. // echo $resultPage;
    89. // echo '<hr style="height:100px;width:102%;margin-left:-1%;background-color:#d8f;" />';
    90. echo $resultAuth;
    91. // echo '<hr style="height:100px;width:102%;margin-left:-1%;background-color:#d8f;" />';
    92. // echo $resultPageAgain;
    Однако, вижу страницу для авторизации.
    Доступ к кукам есть:
    $ sudo chmod 1777 cookie.txt
    В них есть несколько токенов и строка с "hhrole anonymous", что не ест гут.

    В какую сторону копать? Почему cURL не может авторизоваться и как это исправить?

    Копипаст печенек в случае с hh.ru не работает. cURL в процессе авторизации проходит по редиректам, но, похоже, отправляет невалидные данные?

    Спасибо.
     
  2. insomnia

    insomnia Новичок

    С нами с:
    27 мар 2014
    Сообщения:
    1
    Симпатии:
    0
    Присоединяюсь к вопросу