ФорумПрограммированиеPHP для идиотов → cURL

cURL

  • FjuZ

    Сообщения: 64 Репутация: N Группа: Кто попало

    Spritz 30 марта 2011 г. 8:28

    Итак, хочу написать скрипт который будет входить на сайт http://www.rosyrose.ru/polzovateli.htm
    Плагином httpfox разузнал POST запрос и написал такое:
    <?php
    $go='—————————–23281168279961
    Content-Disposition: form-data; name="member_mail"

    [email protected]
    —————————–23281168279961
    Content-Disposition: form-data; name="member_password"

    212121
    —————————–23281168279961
    Content-Disposition: form-data; name="B1"

    Aieoe
    —————————–23281168279961–
    ';
    // Создаем подключение
    if( $curl = curl_init() ){

    // Указываем куда отправлять запрос
    curl_setopt($curl,CURLOPT_URL,'http://www.rosyrose.ru/polzovateli.htm?setup=into');

    // Указываем подключению, что слать нужно не GET (по умолчанию), а POST запросы
    curl_setopt($curl,CURLOPT_POST,TRUE);

    // Указываем, что именно отправлять в POST данных, на этой стадии происходит ввод логина/пароля
    curl_setopt($curl,CURLOPT_POSTFIELDS,$go);

    // Если все ок, в $html вернется html код главной страницы
    if( $html = curl_exec($curl) ){

    echo $html;
    }
    }

    // Закрываем подключение, очищаем память
    curl_close($curl);

    ?>

    Но в итоге выводит страницу с надписью
    Ошибка! Вы не ввели E-mail. Вы не ввели пароль.

    Где я мог ошибиться?
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 30 марта 2011 г. 8:35, спустя 6 минут 42 секунды

    то, что находится в $go подошло бы для сокетов. В курл другая система, он собственно и бы создан чтобы не писать такую хуйню.
    curl_setopt($curl,CURLOPT_POSTFIELDS,http_build_query(array(
    'member_mail' => '[email protected]',
    'member_password' => '212121',
    'B1' => 'Aieoe',
    )));

    curl_setopt($curl,CURLOPT_POST,TRUE); - это не нужно
    а вот CURLOPT_RETURNTRANSFER нужен, но если не хочешь ебать мозг можешь воспользоваться моим классом
    <?php
    require_once 'extra.curl.php';
    $curl = new libcurl;
    $curl->upoint('http://www.rosyrose.ru/polzovateli.htm?setup=into')
    ->and->post(array(
    'member_mail' => '[email protected]',
    'member_password' => '212121',
    'B1' => 'Aieoe',
    ));

    $result = $curl();
    echo $result;
  • FjuZ

    Сообщения: 64 Репутация: N Группа: Кто попало

    Spritz 30 марта 2011 г. 8:44, спустя 9 минут 1 секунду

    fgets, спасибо! но ваш код у меня не хочет работать :(
  • FjuZ

    Сообщения: 64 Репутация: N Группа: Кто попало

    Spritz 30 марта 2011 г. 8:49, спустя 5 минут 26 секунд

    Вставил в свой код, всё заработало.
    fgets, спасибо ещё раз.
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 30 марта 2011 г. 9:01, спустя 11 минут 32 секунды


    Вставил в свой код, всё заработало.
    fgets, спасибо ещё раз.


    ох лол покажи мне этот код
  • FjuZ

    Сообщения: 64 Репутация: N Группа: Кто попало

    Spritz 30 марта 2011 г. 9:23, спустя 22 минуты 15 секунд

    <?php
    // Создаем подключение
    if( $curl = curl_init() ){

    // Указываем куда отправлять запрос
    curl_setopt($curl,CURLOPT_URL,'http://www.rosyrose.ru/polzovateli.htm?setup=into');

    // Указываем, что именно отправлять в POST данных, на этой стадии происходит ввод логина/пароля
    curl_setopt($curl,CURLOPT_POSTFIELDS,http_build_query(array(
    'member_mail' => '[email protected]',
    'member_password' => '212121',
    'B1' => 'Aieoe',
    )));

    // Если все ок, в $html вернется html код главной страницы
    if( $html = curl_exec($curl) ){
    echo $html;

    }
    }

    // Закрываем подключение, очищаем память
    curl_close($curl);

    ?>

    А вот если пытаюсь потом перейти на другую страницу
    <?php
    // Создаем подключение
    if( $curl = curl_init() ){

    // Указываем куда отправлять запрос
    curl_setopt($curl,CURLOPT_URL,'http://www.rosyrose.ru/polzovateli.htm?setup=into');

    // Указываем, что именно отправлять в POST данных, на этой стадии происходит ввод логина/пароля
    curl_setopt($curl,CURLOPT_POSTFIELDS,http_build_query(array(
    'member_mail' => '[email protected]',
    'member_password' => '212121',
    'B1' => 'Aieoe',
    )));

    // Если все ок, в $html вернется html код главной страницы
    if( $html = curl_exec($curl) ){

    curl_setopt($curl,CURLOPT_URL,'http://www.rosyrose.ru/konkurs.htm');

    if( $html = curl_exec($curl) ){
    echo 'ok';
    }

    }
    }

    // Закрываем подключение, очищаем память
    curl_close($curl);

    ?>

    То пишет что уже незалогинен. В чем проблема?
  • fgetsbotbeta

    Сообщения: 2 Репутация: N Группа: Кто попало

    Spritz 30 марта 2011 г. 10:44, спустя 1 час 20 минут 58 секунд

    Итак, у нас есть инструмент (cURL), который делает большую часть работы за нас. И для работы с ним существует ряд библиотек в том числе и для PHP.

    Рассмотрим самый простой пример – получение страницы.

    1.
    $login_url = 'http://my_site.com/';
    2.
    $agent = 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)';
    3.

    4.
    $ch = curl_init(); //инициализация библиотеки
    5.
    //указываем адрес страницы
    6.
    curl_setopt($ch, CURLOPT_URL,$login_url);
    7.
    //указываем заголовок User-Agent
    8.
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    9.
    //указываем, что полученная страница должна быть сохранена в переменную
    10.
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    11.
    //указываем, что cURL должен переходить по редиректам
    12.
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    13.

    14.
    //выполняем запрос
    15.
    $page = curl_exec($ch);


    Как видите, нужно инициализировать библиотеку, указать параметры подключения и отправить запрос. В результате страница будет сохранена в переменной page.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 марта 2011 г. 11:24, спустя 39 минут 46 секунд

    ахуеть круто то как!
    Спустя 51 сек.
    юзай правильное решение под гавнопхп http://clear.helldude.ru/category/%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82-dudecurl/

    как юзать - в блоге есть пара примеров + phpdoc заполненый насколько я помню, так что сориентируешься я думаю
    Сапожник без сапог
  • FjuZ

    Сообщения: 64 Репутация: N Группа: Кто попало

    Spritz 15 апреля 2011 г. 7:26, спустя 15 дней 20 часов 2 минуты

    Продолжаю писать скрипт для этого сайта и возникает проблема. После того как я зарегистрировался и успешно вошел, нужно проголосовать. Регистрацию и вход я написал. А вот когда пытаюсь передать GET запрос, появляется страница где пишет что я не залогинен. Вот отрывок из кода, может я не все что нужно передаю:
    <?php
    curl_setopt($curl,CURLOPT_URL, 'http://rosyrose.ru/konkurs.htm?golos=yes&photoid=414');
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3");
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cfile);
    curl_setopt($curl, CURLOPT_PROXY, "173.212.222.82:3128");
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cfile);

    $html = curl_exec($curl);
    echo $html;

    }
    ?>
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 15 апреля 2011 г. 8:31, спустя 1 час 5 минут 33 секунды

    CURLOPT_COOKIE
  • FjuZ

    Сообщения: 64 Репутация: N Группа: Кто попало

    Spritz 15 апреля 2011 г. 8:50, спустя 18 минут 51 секунду

    fgets, а что в них писать? я смотрел, там sessid уникальный.
  • fgets

    Сообщения: 1099 Репутация: N Группа: Кто попало

    Spritz 15 апреля 2011 г. 10:02, спустя 1 час 11 минут 31 секунду


    fgets, а что в них писать? я смотрел, там sessid уникальный.


    в CURLOPT_COOKIE пиши cookies которые получил с сайта, бери их из файла куков или проще вырезать их самому из headers
  • FjuZ

    Сообщения: 64 Репутация: N Группа: Кто попало

    Spritz 16 апреля 2011 г. 3:44, спустя 17 часов 42 минуты 21 секунду

    fgets, как их получить?
    если вручную, то PHPSESSID везде уникальный.
    если юзаю CURLOPT_COOKIEJAR, то в файл тхт ничего не сохраняется.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!