ФорумПрограммированиеPHP для идиотов → проблема с curl

проблема с curl

  • zxcz

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

    Spritz 13 августа 2011 г. 0:26

    Всем привет, тут возник вопрос,
    вобщем што мне надо.
    мне нужно создать тму на форуме, в форме отправки есть код(типа капчи) который генерируется прикаждом открытии формы отправки,
    мне нужно курлом взять форму и спарсить етот код и сразуже отправить пост запрос, как ето сделать?
    Спустя 83 сек.
    сори, добавлю, отправить пост запрос вместе с етим кодом
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 13 августа 2011 г. 0:28, спустя 1 минуту 57 секунд

    Используй регулярные выражения.
    Смотри в эту тему http://pyha.ru/forum/topic/6845 у тебя похожая ситуация
  • zxcz

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

    Spritz 13 августа 2011 г. 0:30, спустя 2 минуты 1 секунду

    нет, непохожая, спарсить я могу ето непроблема, проблема в том как одним сеансом курла и спарсить код и отправить пост запросом?
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 13 августа 2011 г. 0:33, спустя 2 минуты 50 секунд

    сначала делаешь запрос парсинга, затем делаешь запрос на постинг
    Используй CURLOPT_POSTDATA
    http://php.net/manual/ru/function.curl-setopt.php
    Спустя 28 сек.
    Прошу прощения CURLOPT_POSTFIELDS
  • zxcz

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

    Spritz 13 августа 2011 г. 0:38, спустя 5 минут 46 секунд

    слушайте, я ето всё знаю, вы дуже непопытались вникнуть в суть моего вопроса, если я зделаю запрос парсинга в первом сеансе курла и получу код, то во втором сеансе где будет пост запрос етот код уже неподойдёт, в етом проблема, мне надо всё сразу и спаристь и отправить, я вам подругому обьясню, ето как капча, вы же неможете сначала открыть страницу с одной копчой, обновить страеницу на которой будет уже другая и ввести первую, вот у меня тоже самое, я незнаю што делать
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 13 августа 2011 г. 0:51, спустя 13 минут


    слушайте, я ето всё знаю, вы дуже непопытались вникнуть в суть моего вопроса, если я зделаю запрос парсинга в первом сеансе курла и получу код, то во втором сеансе где будет пост запрос етот код уже неподойдёт, в етом проблема, мне надо всё сразу и спаристь и отправить, я вам подругому обьясню, ето как капча, вы же неможете сначала открыть страницу с одной копчой, обновить страеницу на которой будет уже другая и ввести первую, вот у меня тоже самое, я незнаю што делать


    Нужно просто лучше изъясняться. В твоем случае наверняка нужно принять и передать сессию. Запрашивай код с CURLOPT_HEADER = true, затем парси строку Set-Cookie: туткуки, вытаскивай ключ сессии и передавай его в CURLOPT_COOKIE при пост запросе
  • fgets

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

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

    Spritz 13 августа 2011 г. 0:56, спустя 36 секунд



    слушайте,  я ето всё знаю, вы дуже непопытались вникнуть в суть моего вопроса, если я зделаю запрос парсинга в первом сеансе курла и получу код, то во втором сеансе где будет пост запрос етот код уже неподойдёт, в етом проблема, мне надо всё сразу и спаристь и отправить, я вам подругому обьясню, ето как капча, вы же неможете сначала открыть страницу с одной копчой, обновить страеницу на которой будет уже другая и ввести первую, вот у меня тоже самое, я незнаю што делать


    Нужно просто лучше изъясняться. В твоем случае наверняка нужно принять и передать сессию. Запрашивай код с CURLOPT_HEADER = true, затем парси строку Set-Cookie: туткуки, вытаскивай ключ сессии и передавай его в CURLOPT_COOKIE при пост запросе


    парсить в одном сеансе так же где я и буду делать пост запрос? а как мне запросить  код с CURLOPT_HEADER = true?? подскажите
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 13 августа 2011 г. 0:57, спустя 49 секунд




    слушайте,  я ето всё знаю, вы дуже непопытались вникнуть в суть моего вопроса, если я зделаю запрос парсинга в первом сеансе курла и получу код, то во втором сеансе где будет пост запрос етот код уже неподойдёт, в етом проблема, мне надо всё сразу и спаристь и отправить, я вам подругому обьясню, ето как капча, вы же неможете сначала открыть страницу с одной копчой, обновить страеницу на которой будет уже другая и ввести первую, вот у меня тоже самое, я незнаю што делать


    Нужно просто лучше изъясняться. В твоем случае наверняка нужно принять и передать сессию. Запрашивай код с CURLOPT_HEADER = true, затем парси строку Set-Cookie: туткуки, вытаскивай ключ сессии и передавай его в CURLOPT_COOKIE при пост запросе


    парсить в одном сеансе так же где я и буду делать пост запрос? а как мне запросить  код с CURLOPT_HEADER = true?? подскажите


    http://php.net/manual/ru/function.curl-setopt.php
  • zxcz

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

    Spritz 13 августа 2011 г. 1:08, спустя 11 минут 9 секунд

    нету етого кода в заголовках

    Спустя 168 сек.
    етот код регенится в данних для пост запроса
    <input type='hidden' name='act' value='Post' />
    <input type='hidden' name='s' value='' />
    <input type='hidden' name='f' value='201' />
    <input type='hidden' name='auth_key' value='0b636b48819787da8b5fa48c2c27185b' />
    <input type='hidden' name='removeattachid' value='0' />
    <input type='hidden' name='MAX_FILE_SIZE' value='102400000' />
    <input type='hidden' name='CODE' value='01' />
    <input type='hidden' name='attach_post_key' value='aa7ab1826ded4d8ac49fdb7620f20d99' />


    форум ipb
    Спустя 32 сек.
    вот он <input type='hidden' name='attach_post_key' value='aa7ab1826ded4d8ac49fdb7620f20d99' />
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 13 августа 2011 г. 1:11, спустя 3 минуты 8 секунд

    Парси все эти данные и посылай в CURLOPT_POSTFIELDS, больше не буду тебе помогать
  • zxcz

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

    Spritz 13 августа 2011 г. 1:16, спустя 4 минуты 29 секунд

    ну пошлю, и што с етого? мне форум как всегда напишет ,,Если вы неправильно обратились к данной функции, исправьте ошибку и используйте соответствующий этой функции метод.,,




    $cur=curl_init();
    curl_setopt($cur, CURLOPT_URL, 'http://site.ru/index.php?act=post&do=new_post&f=201');
    curl_setopt($cur,CURLOPT_USERAGENT,"Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.8.131 Version/11.10");
    curl_setopt($cur,CURLOPT_COOKIEJAR,'cookie.txt');
    curl_setopt($cur,CURLOPT_COOKIEFILE,'cookie.txt');
    curl_setopt($cur,CURLOPT_RETURNTRANSFER,1);
    $doc = curl_exec($cur);
    curl_close($cur);
    preg_match("/<input type=\'hidden\' name=\'attach_post_key\'(.*?)\/>/",$doc, $aa);
    preg_match("/[a-zA-Z0-9]{10,100}/",$aa[0], $bb);

    //тут я взял ключ


    но для етого курла уже код будет другим!!!!
    PHP код:
    $cur=curl_init();
    curl_setopt($cur, CURLOPT_URL,'http://site.ru/index.php?' );
    curl_setopt($cur,CURLOPT_USERAGENT,"Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.8.131 Version/11.10");
    curl_setopt($cur,CURLOPT_COOKIEJAR,'cookie.txt');
    curl_setopt($cur,CURLOPT_COOKIEFILE,'cookie.txt');
    curl_setopt($cur,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($cur, CURLOPT_POST, 1);
    curl_setopt($cur, CURLOPT_POSTFIELDS, "act=Post&f=201&auth_key=47442e6ac2fd23311b01a0db9ed438b1&removeattachid=0&MAX_FILE_SIZE=102400000&CODE=01&attach_post_key=$bb[0]&TopicTitle=$theme&TopicDesc=0&Post=$mypost");
    curl_exec($cur);
    curl_close($cur);

    как мне ето всё обьеденить?
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 13 августа 2011 г. 1:25, спустя 9 минут 7 секунд

    preg_match("/<input type=\'hidden\' name=\'attach_post_key\'(.*?)\/>/",$doc, $aa);

    Вместо этого бреда матчи все поля:
    /<input type=[\'|\"]hidden[\'|\"] name=[\'|\"](.+?)[\'|\"] value=[\'|\"](.+?)[\'|\"]/is

    и перебирай их потом, и что нужно собирай, используя http://php.net/manual/ru/function.http-build-query.php (преобразует массив Key => Value в строку для CURLOPT_POSTFIELDS)
  • phpdude

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

    Spritz 13 августа 2011 г. 1:26, спустя 1 минуту 42 секунды

    а иван неплох :-)

    продолжайте )
    Сапожник без сапог
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 13 августа 2011 г. 1:29, спустя 2 минуты 54 секунды

    Я стал жертвой тролля?

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