cURL основы нужно разобраться

Тема в разделе "PHP", создана пользователем guru85, 17 фев 2011.

Модераторы: latteo
  1. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    Ну вот подошел черед разобраться что такое cURL. Human Emulator запудрил мне мозги, и я немогу понять физику процесса работы php с ссайтами. допустим на сайте есть форма search, в нее необходимо внести данные и нажать ктнопку пуск, затем получить результат, допустим html код страницы, чтоб потом ее спарсить. в эмуляторе все понятно, а вот без него на чистом пхп пока не очень. Может на пальцах кто обяснит эту задачку, а дальше я уж сам постараюсь. я дела скрипт, из формы передовал данные в скрипт post методом, но тут ведь другая задача, из скрипта передать в поле а потом получит результат, немного запутался.
     
  2. frantz1488

    frantz1488

    Регистр.:
    21 мар 2010
    Сообщения:
    162
    Симпатии:
    43
    Накатал небольшой скрипт для примера.
    Авторизация в меил.ру:
    Идем на страницу http://win.mail.ru/cgi-bin/login открываем исходный код и ищем теги "form" и смотрим куда будет отправлятся запрос (http://win.mail.ru/cgi-bin/auth), далее атрибуты "name" у полей которые нам нужны, а именно
    поле ввода логина "Login",
    поле выбора домена "Domain",
    поле ввода пароля "Password",
    А дальше собсно забиваем все ето в скрипт:
    PHP:
    <?php
        
    // логин
    $login "fdrawut";
        
    // пароль
    $pass "qwe123";
        
    // Место хранения куков
    $user_cookie_file $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'//Полный путь до файла, где будем хранить куки
        // инициализация curl
    $ch curl_init ();
        
    // адрес страницы куда посылать запрос
    curl_setopt ($chCURLOPT_URL "http://win.mail.ru/cgi-bin/auth"); 
        
    // каким браузером будем прикидываться
    curl_setopt ($chCURLOPT_USERAGENT "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7");
        
    // Указываем что нужно вывести загруженную страницу в переменную или (0)-вывести на экран
    curl_setopt ($chCURLOPT_RETURNTRANSFER ); 
        
    // Переходить по редиректам или (0)
    curl_setopt ($chCURLOPT_FOLLOWLOCATION1); 
        
    // Подставляем куки
    curl_setopt ($chCURLOPT_COOKIEFILE$user_cookie_file); //Куки раз
    curl_setopt ($chCURLOPT_COOKIEJAR$user_cookie_file); //Куки два
        // елси проверят с какой страницы пришел
    curl_setopt ($chCURLOPT_REFERER"http://mail.ru/");
        
    // не возвращает заголовки
    curl_setopt ($chCURLOPT_HEADER0); 
        
    // обрабатывает все кодировки          
    curl_setopt ($chCURLOPT_ENCODING"");        
        
    // Включить передачу POST-запроса
    curl_setopt ($chCURLOPT_POST1);
        
    // Отсылаем пост запрос 
    curl_setopt ($chCURLOPT_POSTFIELDS"Login=$login&Domain=mail.ru&Password=$pass");
        
    // скачиваем страницу в переменную
    $parsing curl_exec($ch); 
        
    // закрываем соединение
    curl_close($ch); 
        
    // Выводим результат
    echo $parsing;
    ?>
    Будут вопросы обращайся.
     
  3. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    996
    Симпатии:
    268
    А чем отличаются эти куки?
    PHP:
    curl_setopt ($chCURLOPT_COOKIEFILE$user_cookie_file); //Куки раз 
    curl_setopt ($chCURLOPT_COOKIEJAR$user_cookie_file); //Куки два
     
  4. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    гугл говорит
     
  5. frantz1488

    frantz1488

    Регистр.:
    21 мар 2010
    Сообщения:
    162
    Симпатии:
    43
  6. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    guru85, поставь себе сниффер и смотри как браузер данные форм отправляет, курлом потом так же делаешь.
    Результатом запроса будет хтмл-код, из которого регэкспами нужные данные выдёргиваешь.
     
  7. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    А все почему?, а потому что не с XHE начинать надо а с PHP. Как только дело доходит до момента интересной (сложной) обработки в регерах под XHE, то все счастливые пользователи лицензий XHE приходят в ступор а как же это сделать и выясняется что с XHE то не все так гладко и необходимых функций нет или как правило чаще всего они не работают;)

    И тут то начинается поиск кодера который за пять минут натыкает макрос и сделает цикл, за 10$ так как делов то там на пять минут ... Ну да ладно чего то мы от темы отвлеклись.


    По теме:
    1) Читай маны по cURL, их не так много как кажется.
    2) Используй поиск по форуму в частности в раздели PHP для начинающих, до тебя уже все не раз пережёвывали в той или иной форме.

    Теперь алгоритм отправки и получения данных:
    1) Проверяешь снифером в комплексе с браузером, чего и куда у тебя отправляет необходимая форма, в частности тебе необходимо узнать адрес удаленного скрипта обработчика и какие данные ему отправляются.
    2) Формируешь пост данные и конфигурируеш cURL перед запросом. Дальше делаешь запрос и отправляешь данные.
    3) Получаешь ответ от сервера на твой запрос, и разбираешь полученные данные.

    Это конечно все при хорошем раскладе, но как правило не все так гладко в этом мире и подводных камней тут куча. И придется не мало попрыгать с бубном бессонными ночами над стопками мануалов, причем не только для cURL и PHP.
     
  8. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    ну вот, немного разобрался, накидал несколько топорных скриптов. Появились вопросы. Имеем
    PHP:
    <INPUT TYPE="radio" NAME="linkingtype" VALUE="abclinking" onClick="abcSwitchControl(f2,'abclinking')">
    суть такая, когда в браузере я выбираю этот чек бокс то некий скрипт генерирует данные в форме
    PHP:
    <textarea wrap="off" name="rlvl" cols="40" rows="50" style=" width: 650px; height: 200px" readonly="yes">
    но когда я передаю курлом post запрос вида linkingtype=abclinking то чек бокс выбирается а вот данных не появляется, кажется загвозка с onClick. Второе есть еще одна трудность при нажатии на кнопку сабит вот html
    PHP:
    <input type="Submit" name="addblog" value="Add Blog" style="width: 150px; height: 20px" onclick="return confirm('Have you put text?\n\nClick OK if you have and we will \nIf not, just click CANCEL and try again after you add them')"></td>
    выскакивает окно с вопросом и там надо нажать ок в эмуляторе с этим прекрасно справлялся
    PHP:
    $browser->enable_browser_message_boxes(false,$default_answer="OK");
    как реализовать тут?
     
  9. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    363
    Симпатии:
    117
    после клика на чекбоксе JavaScript вставляет в ДУМ новый HTML-элемент <textarea wrap="off" name="rlvl" ....
    значит после после нажатия кнопки данное поле также передастся на сервак. ( если только его перед отправкой повторно не удалит тот-же ДжаваСкрипт )

    Следовательно когда курлом передаешь linkingtype=abclinking
    то и одновременное передавай и rlvl=VALUE
    Только проверь снифером действительно ли оно передается, а то в нем стоит признак "только для чтнения" readonly="yes" и потом как-то странно ...

    В курле ниче нажимать ненужно ...
    это окно с сообщением аля "Вы уверены? " .. оно не играет никакой роли
     
  10. guru85

    guru85 Постоялец

    Регистр.:
    24 мар 2010
    Сообщения:
    134
    Симпатии:
    3
    да действительно необходимо было отправить rlvl=VALUE но опять проблема, этот VALUE при отправке снифер показывает что отправляет то что получается при выборе чекбокса, я выбираю чек бокс в форме получается некий скрипт формирует данные, вот их и отправляет параметр rlvl=тут текст который должен получится при выборе чекбокса. Так вот как же мне эти данные перехватить? мне этот текст и дальше нужен, мне бы его в переменную превратить. там три таких чекбокса и при выборе другого формируется другой текст. даже спарсить его неполучается его просто нет в html коде. может я чего не догоняю и VALUE и есть этот текст, но как мне его тогда посмотреть, после обработке он пишет спасибо за отправку и слово VALUE а должны быть данные из формы.