За последние 24 часа нас посетили 54006 программистов и 1720 роботов. Сейчас ищут 993 программиста ...

Как загрузить страницу на mail авторизовавшиьс?

Тема в разделе "PHP для новичков", создана пользователем win, 21 ноя 2012.

  1. win

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

    С нами с:
    21 окт 2012
    Сообщения:
    9
    Симпатии:
    0
    Доброе время суток:
    Помогите нубу
    мне нужно выполнить такой алгоритм
    запросить страницу http://my.mail.ru/?ffsputnik=1
    на проекте мой мир
    и сохранить её в файл.
    Делаю это так
    Код (Text):
    1.  
    2.  <?php
    3. $ch = curl_init("http://my.mail.ru/?ffsputnik=1");
    4. $fp = fopen("example_homepage.txt", "a+");
    5.  
    6. curl_setopt($ch, CURLOPT_FILE, $fp);
    7. curl_setopt($ch, CURLOPT_HEADER, 0);
    8.  
    9. curl_exec($ch);
    10. curl_close($ch);
    11. fclose($fp);
    12. ?>
    Но тогда у меня сохраняется страница как не авторизованого пользователя
    А как мне авторизовавшись запросить используя Cookie
    можно пример?
     
  2. demyan1

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

    С нами с:
    17 май 2012
    Сообщения:
    65
    Симпатии:
    0
    Код (PHP):
    1. $ch = curl_init();
    2. curl_setopt($ch, CURLOPT_URL, 'https://site.ru');
    3. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    4. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    5. curl_setopt($ch, CURLOPT_USERAGENT,'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.229 Version/11.64');
    6. curl_setopt($ch, CURLOPT_HTTPHEADER,array (Accept => 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap',Accept-Language => 'ru-RU,ru;q=0.9,en;q=0.8',Accept-Encoding => 'gzip, deflate'));
    7. curl_setopt($ch, CURLOPT_HEADER, TRUE);
    8. curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);
    9. curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
    10. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
    11. curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt');
    12. curl_setopt($ch, CURLOPT_COOKIEFILE,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt');
    13. curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); 
    14. curl_setopt($ch, CURLOPT_POST, TRUE);
    15. curl_setopt($ch, CURLOPT_REFERER, 'https://mysite.ru');
    16. curl_setopt($ch, CURLOPT_POSTFIELDS, array("поле1" => "значение поля1", "поле2" => "значение поля2"));
    17. $home = curl_exec($ch); 
    18. curl_close($ch); 
     
  3. win

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

    С нами с:
    21 окт 2012
    Сообщения:
    9
    Симпатии:
    0
    demyan1 - а можно разъяснения, хочу разобраться а не бездумно копировать код.
    curl_setopt($ch, CURLOPT_URL, 'https://site.ru'); в этой строке что подразумевается? сайт авторизации или что?
    curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt');тут понятно откуда берем cookies
    curl_setopt($ch, CURLOPT_REFERER, 'https://mysite.ru'); а что пишем тут? что за страница?
    curl_setopt($ch, CURLOPT_POSTFIELDS, array("поле1" => "значение поля1", "поле2" => "значение поля2")); И что тут должны быть за значения?
     
  4. demyan1

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

    С нами с:
    17 май 2012
    Сообщения:
    65
    Симпатии:
    0
    да.
    Код (PHP):
    1. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // для остановки cURL от проверки сертификата узла сети
    2. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // для проверки существования общего имени и также его совпадения с указанным хостом
    3. curl_setopt($curl, CURLOPT_USERAGENT,'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.229 Version/11.64'); // представляемся как опера
    4. curl_setopt($curl, CURLOPT_HTTPHEADER,array (Accept => 'text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap',Accept-Language => 'ru-RU,ru;q=0.9,en;q=0.8',Accept-Encoding => 'gzip, deflate')); // передаём заголовки
    5. curl_setopt($curl, CURLOPT_HEADER, TRUE); // включаем приём заголовков
    6. curl_setopt($curl, CURLOPT_RETURNTRANSFER,TRUE); // результат выводим в переменную вместо прямого вывода в браузер
    7. curl_setopt($curl, CURLOPT_FOLLOWLOCATION,TRUE); // следуем туда, куда скажет сервер
    8. curl_setopt($curl, CURLOPT_COOKIESESSION, TRUE); // начинаем новую сессию и перезаписываем cookies
    9. curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); // ждём 30сек. при попытке соединения
    10. curl_setopt($curl, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt'); // имя файла, содержащего cookies
    11. curl_setopt($curl, CURLOPT_COOKIEFILE,$_SERVER['DOCUMENT_ROOT'].'/my_cookies.txt'); // имя файла, в котором будут сохранены все внутрение cookies
    12. curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); // декодируем запрос
    13. $homcurl_close($curl); // закрываем сессию   
    Добавлено спустя 3 минуты 5 секунд:
    поля на странице сайта, которые нам необходимо заполнить значениями (логин, пароль, е-майл и т.д., в т.ч. могут быть скрытыми).
    вообще-то инфы на эту тему в сети дохрена, было бы желание искать...

    Добавлено спустя 1 минуту 20 секунд:
    реферер, откуда пришли на сайт (можно не устанавливать, но иногда нужно)
     
  5. win

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

    С нами с:
    21 окт 2012
    Сообщения:
    9
    Симпатии:
    0
    так ага ясно но вот еще кое что не понел
    я авторизуюсь вот тут https://e.mail.ru/cgi-bin/login?
    curl_setopt($ch, CURLOPT_POSTFIELDS, array("поле1" => "значение поля1", "поле2" => "значение поля2"));
    и что писать в поле1 ?
    не понел....
    поле 1 содержит логин и получается curl_setopt($ch, CURLOPT_POSTFIELDS, array("поле1" => "логин", "поле2" => "пароль"));
    А что писать за вместо поле1 и поле2
     
  6. demyan1

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

    С нами с:
    17 май 2012
    Сообщения:
    65
    Симпатии:
    0
    установите какой-нибудь сниффер, затем без помощи скрипта авторизуйтесь на странице и параллельно смотрите какие данные из каких полей передаются при авторизации.
    если у вас Internet Explorer(вроде и Firefox подходит), можете воспользоваться HttpWatch (скачаете в сети).
    либо ещё вариант - посмотрите исходный код страницы, будьте внимательны - некоторые поля имеют свойство:
    Код (Text):
    1. type="hidden"
    , их тоже нужно передавать, даже если они пустые.
     
  7. win

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

    С нами с:
    21 окт 2012
    Сообщения:
    9
    Симпатии:
    0
    <input id="login" type="text" value="adress" name="Login">
    Прямо так тегом и писать?
    curl_setopt($ch, CURLOPT_POSTFIELDS, array("<input id="login" type="text" value="adress" name="Login">" => "значение поля1", "поле2" => "значение поля2"));
    Ну и со вторым соответственно
    вот исходный html код форм:
    Код (Text):
    1. <tbody>
    2. <tr>
    3. <td class="login-form__td-label">
    4. <label class="login-form__label" for="login">Имя</label>
    5. </td>
    6. <td>
    7. <input id="login" type="text" value="adress" name="Login">
    8. </td>
    9. <td>
    10. <select class="login-form__select" name="Domain">
    11. <option value="mail.ru">@mail.ru</option>
    12. <option selected="" value="inbox.ru">@inbox.ru</option>
    13. <option value="list.ru">@list.ru</option>
    14. <option value="bk.ru">@bk.ru</option>
    15. </select>
    16. </td>
    17. </tr>
    18. <tr>
    19. <td class="login-form__td-label">
    20. <label class="login-form__label" for="password">Пароль</label>
    21. </td>
    22. <td>
    23. <div id="tooltipAuth_shell" class="tooltip" style="display: none;">
    24. <div id="tooltipAuth_tail" class="tail"></div>
    25. <div class="ltc"></div>
    26. <div class="rtc"></div>
    27. <div class="ts"></div>
    28. <div class="inner">
    29. <div class="rborder">
    30. <div id="tooltipAuth_mess" class="mess">
    31. </div>
    32. <div id="tooltipAuth_struter" class="struter"></div>
    33. </div>
    34. </div>
    35. <div class="lbc"></div>
    36. <div class="rbc"></div>
    37. <div class="bs"></div>
    38. </div>
    39. <input id="password" type="password" name="Password">
     
  8. demyan1

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

    С нами с:
    17 май 2012
    Сообщения:
    65
    Симпатии:
    0
    вы не внимательно читаете то, что я пишу - это во-первых,
    имя полю даёт параметр name="Login", значит так: "Login" => "значение поля Login", и так дальше...
    также не забудьте о скрытых полях и поле "Domain", которое может принимать следующие значения: mail.ru, inbox.ru, list.ru и т.д.
    могут быть также другие поля, необходимые для защиты от ботов, которые вычисляются с помощью сниффера либо
    и ещё раз:
     
  9. win

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

    С нами с:
    21 окт 2012
    Сообщения:
    9
    Симпатии:
    0
    demyan1 Спасибо с этим совсем разобрались!
    Вот остался последний вопрос прости те что довожу уже до банальности
    просто php учу только неделю.
    в том коде ошибок вроде нет.
    как мне теперь запросить нужную страницу и сохранить её в файл?
    по аналогу кода сверху?
    И всё на этом я от вас отстану. Спасибо что помогли ламеру! я вам очень признателен
     
  10. demyan1

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

    С нами с:
    17 май 2012
    Сообщения:
    65
    Симпатии:
    0
    ...а в гугле слабо набрать "сохранить страницу в файл php"?
    нее так далеко вы не пойдёте, лень тому причина :)
    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/file.txt',$home);
    $home-страница, которую вы получили в результате POST-запроса
    $_SERVER['DOCUMENT_ROOT'] - корневая директория сервера, может быть задана любая другая.
     
  11. win

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

    С нами с:
    21 окт 2012
    Сообщения:
    9
    Симпатии:
    0
    Нет как писать в файл то я знаю :) просто не дошло что в $home
    А скажите нормально то что после работа скрипта файл cookie.txt пустой?
    И мне после авторизации надо загрузить другую страницу где для неё ссылку писать?

    Добавлено спустя 2 минуты 49 секунд:
    Хотя ладно вопрос решён! - спасибо за помощь!
    Удачи вам в написание ваших программ :)
     
  12. demyan1

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

    С нами с:
    17 май 2012
    Сообщения:
    65
    Симпатии:
    0
    нет он не пустой
    если страница этого же сайта, тогда нужны те же самые куки, тогда так:
    Код (PHP):
    1. curl_setopt($curl, CURLOPT_COOKIESESSION, FALSE);