Нужен скрипт или бот для конкурса

Discussion in 'Болталка' started by contreil, 26 Nov 2011.

  1. contreil

    contreil New Member

    Joined:
    11 Jul 2008
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Вообщем есть вопросы и ответы, нужен бот или скрипт чтобы сам отвичал на определенный вопрос правильным вариантом ответа. Возможно ли найти бесплатно, если нет то сколько это будет стоить?

    <div class="contest quiz">
    <div class="contest_top"></div>
    <div class="contest_cont">
    <div class="question-number">Вопрос 1 из 1</div>
    <div class="question">

    <p>Что было раньше — курица или яйцо ?</p>

    <div class="quiz_timer">
    <span id="quiz_count"></span>
    </div>
    </div>
    <form method="POST" action=".">
    <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='5778cca3ee693c18489d8cbfa72191db' /></div>
    <div class="answers">
    <ul>
    <li><label for="id_choice_0"><input value="12" type="radio" class="styled" name="choice" id="id_choice_0" /> курица</label></li>
    <li><label for="id_choice_1"><input value="13" type="radio" class="styled" name="choice" id="id_choice_1" /> яйцо</label></li>
    </ul>
    </div>
    <input type="submit" value="" class="next_quiz">
    </form>
    </div>
     
  2. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    <?php

    $link = "http://"; //ccылка на опрос

    $otvet = "13";

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $link);
    curl_setopt($ch, CURLOPT_POST, 1); //будет POST
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "choice=$otvet");
    curl_exec($ch);
    curl_close($ch);

    echo "ok\n";

    ?>
     
  3. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    daniel777, а токены проигнорируем, ага?
     
  4. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    Извиняюсь, завтыкал.
    Если этот токен не меняется при каждом обновлении страницы - должно работать.

    <?php

    $link = "http://"; //ccылка на опрос

    $otvet = "13"; //ответ

    $res = file_get_contents($link);
    preg_match("#value='(.*?)' />#", $res, $t);
    $t=$t[1];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $link);
    curl_setopt($ch, CURLOPT_POST, 1); //будет POST
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "csrfmiddlewaretoken=$t&choice=$otvet");
    curl_exec($ch);
    curl_close($ch);

    echo "ok\n";

    ?>
     
  5. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Security-токены вообще-то созданы для защиты от CSRF и меняются при каждом обновлении страницы / сессии.
     
  6. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37

    Та я это уже понял...

    1 запрос чтобы сграбить токен
    2 запрос - POST с данными

    И на втором запросе уже генерируется другой токен.

    Как можно решить эту проблему?
     
  7. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Сам ответил на свой вопрос же =\
     
  8. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    В каком месте?
     
  9. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Code:
    1 запрос чтобы сграбить токен
    2 запрос - POST с данными
     
  10. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    Повторю то, что я написал выше.

    При втором запросе сгенерируется НОВЫЙ токен, а старый, сграбленый при первом запросе будет уже не действителен.

    Тоесть:

    $res=file_get_contents($link); //скачиваем страницу
    preg_match("#value='(.*?)' />#", $res, $t);$t=$t[1]; //вытаскиваем токен №1


    Теперь делаем POST запрос, отправляем нужные данные, и токен.

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $link);
    curl_setopt($ch, CURLOPT_POST, 1); //будет POST
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "csrfmiddlewaretoken=$t&choice=$otvet");
    curl_exec($ch); //А вот здесь отправляется запрос с токеном №1, но так как идет обращение к тому же скрипту, то генерируется токен №2, а первый становится НЕ ДЕЙСТВИТЕЛЬНЫМ.
    curl_close($ch);
     
  11. zifanchuck

    zifanchuck Elder - Старейшина

    Joined:
    27 Oct 2008
    Messages:
    396
    Likes Received:
    154
    Reputations:
    3
    daniel777, мб грабить токен тоже курлом с использованием куков?