На сайте есть форма для заполнения, нужно отправить 15к одинаковых запросов

Discussion in 'PHP' started by sultan128, 20 Dec 2009.

  1. sultan128

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

    Joined:
    6 Apr 2008
    Messages:
    45
    Likes Received:
    37
    Reputations:
    -5
    Собственно сабж.
    Сама форма:
    Code:
    <form action="/cgi-bin/faq.cgi" method="post" name="frmSend" id="frmSend" enctype="multipart/form-data" style="margin:0;" onSubmit="alert
    
    ('!!!!'); return SendData();"><TABLE width="100%">
    						<TR>
    							<TD class="label"><B class="red">*</B> Имя и фамилия</TD>
    
    							<TD class="input"><INPUT name="name" type="text" class="wide" id="name" maxlength="255"></TD>
    						</TR>
    						<TR>
    							<TD class="label"><B class="red">*</B> Род деятельности</TD>
    							<TD class="input"><INPUT name="title" type="text" class="wide" id="title" maxlength="255"></TD>
    						</TR>
    						<TR>
    
    							<TD class="label"><B class="red">*</B> Город проживания</TD>
    							<TD class="input"><INPUT name="city" type="text" class="wide" id="city" maxlength="255"></TD>
    						</TR>
    						<TR>
    							<TD class="label"><B class="red">*</B> Контактный телефон</TD>
    							<TD class="input"><INPUT name="phone" type="text" class="wide" id="phone" maxlength="255"></TD>
    
    						</TR>
    						<TR>
    							<TD class="label">E-Mail</TD>
    							<TD class="input"><INPUT name="email" type="text" class="wide" id="email" maxlength="255"></TD>
    						</TR>
    						<TR>
    							<TD class="label"><B class="red">*</B> Вопрос</TD>
    
    							<TD class="input"><TEXTAREA name="question" cols="40" rows="5" class="wide" id="question" 
    
    style="width:100%"></TEXTAREA><BR><SPAN class="footnote" style="padding-left:0px; ">не более 150-ти символов</SPAN></TD>
    						</TR>
    						<TR>
    							<TD class="label"><B class="red">*</B> Ответ</TD>
    							<TD class="input"><TEXTAREA name="answer" cols="40" rows="5" class="wide" id="answer" 
    
    style="width:100%" ></TEXTAREA></TD>
    						</TR>
    						<TR>
    
    							<TD class="label"><B class="red">*</B> Откуда узнали о нас?</TD>
    							<TD class="input"><INPUT name="source" type="text" class="wide" id="source" maxlength="255"></TD>
    						</TR>
    						<TR>
    							<TD class="label">Фото</TD>
    							<TD class="input"><INPUT name="photo" type="file" class="wide" id="photo" maxlength="255"></TD>
    						</TR>
    
    						<TR>
    							<TD>&nbsp;</TD>
    							<TD><DIV class="button"><A href="#" onClick="return SendData();">Отправить</A></DIV></TD>
    						</TR>
    					</TABLE>
    					<br><span class="footnote red"><B>*</B> - обязательные для заполнения поля</span>
    </FORM>							</TD>
    
    Также на сайте имеется следующий скрипт:
    Code:
    <script>
      function SendData() {
    	if (document.frmSend.name.value == "") {
          window.alert("Вы не указали свое имя.");
          return false;
        }
        if (document.frmSend.name.value.length > 20) {
          window.alert("Поле \"Имя и фамилия\" не может содержать более 20 символов.");
          return false;
        }
        if (document.frmSend.title.value == "") {
          window.alert("Укажите, пожалуйста, род своей деятельности.");
          return false;
        }
        if (document.frmSend.city.value == "") {
          window.alert("Не указан город проживания.");
          return false;
        }
        if (document.frmSend.phone.value == "") {
          window.alert("Не указан телефон телефон.");
          return false;
        }
        if (document.frmSend.question.value == "") {
          window.alert("Вы не задали вопрос");
          return false;
        }
    	if (document.frmSend.question.value.length > 150) {
          window.alert("Вопрос слишком длинный. Постарайтесь уложиться в 150 символов.");
          return false;
        }
        if (document.frmSend.answer.value == "") {
          window.alert("Вы забыли дать ответ на вопрос.");
          return false;
        }
    	if (document.frmSend.answer.value.length > 120) {
          window.alert("Ответ слишком длинный. Постарайтесь уложиться в 120 символов.");
          return false;
        }
    	if (document.frmSend.source.value == "") {
          window.alert("Укажите, пожалуйста, источник Вашей информации.");
          return false;
        }
        return frmSend.submit();
      }
    </script>
    
    Нужно, чтобы отправилось 15к-20к запросов, с данными: text1, text2... соответственно в полях со звездочками. Без проксей и каптч. Как такое реализовать?
     
  2. brainy

    brainy Member

    Joined:
    21 Aug 2009
    Messages:
    30
    Likes Received:
    44
    Reputations:
    4
    купить или попросить кого-то из владельцев хуман емулятора сделать скрипт
    дело нескольких минут
     
  3. lo0

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

    Joined:
    6 Mar 2006
    Messages:
    113
    Likes Received:
    20
    Reputations:
    14
    Code:
    import urllib2, urllib
    
    urllib2.install_opener(urllib2.build_opener())
    params = {'name':'Свое значение',
              'title':'Свое значение',
              'city':'Свое значение',
              'phone':'Свое значение',
              'email':'Свое значение',
              'question':'Свое значение',
              'answer':'Свое значение',
              'source':'Свое значение'}
    result = urllib2.urlopen('www.DOMAIN.com/cgi-bin/faq.cgi',urllib.urlencode(params)).read()
    result оставляю на твое усмотрение, в дальнейшем можно чекать ответ от сервера :)
     
  4. sultan128

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

    Joined:
    6 Apr 2008
    Messages:
    45
    Likes Received:
    37
    Reputations:
    -5
    lo0
    Я, признаться, в языках программирования не силен, буду благодарен, если разъяснишь, что с этим надо делать, или дашь свою асю..
     
  5. lo0

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

    Joined:
    6 Mar 2006
    Messages:
    113
    Likes Received:
    20
    Reputations:
    14
    Можно в ПМ писать, помогу
    1. Сохраняешь все это дело в файл file_nbame.py
    2. Вместо слов 'Свое значение' указываешь свои данные
    3. www.DOMAIN.com - заменяешь на свой сайт
    4. Если у тя не уставновлен питон, то нужно установить
    5. Запускаем скрипт: python file_nbame.py

    PS: 5-й пункт отлично работает под никсами(у меня не винда), а для запуска на твоей ОС - достаточно посмотреть документацию, но вообще проблем не должно быть.
    Если будут вопросы - пиши :)
     
  6. sultan128

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

    Joined:
    6 Apr 2008
    Messages:
    45
    Likes Received:
    37
    Reputations:
    -5
    lo0
    Отписал в ПМ, но ответа не получил, поэтому спрошу здесь, если кто-нибудь может - ответьте, пж, на следущюие вопросы: данный скрипт будет работать, насколько я понимаю, с компа? Как регулировать кол-во запросов?
    Когда нажимаю кнопку "отправить" на сайте с формой (предварительно заполнив все необходимые поля), меня перекидывает на страницу (допустим, www.DOMAIN.com/good) с надписью "ваша заявка принята", после чего происходит редирект на первоначальную страницу с формой, ввиду этих данных, как нужно изменить строку result в коде?
     
  7. lo0

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

    Joined:
    6 Mar 2006
    Messages:
    113
    Likes Received:
    20
    Reputations:
    14
    Да, этот скрипт можно запускать с любой машине, лишь бы был доступ к www.DOMAIN.com
    Один раз запустил скрипт - один запрос выполнися, можно добавить в планировщик задач (cron for unix like)
    После запуска скипрта, переменная result будет содеражть ответ от сервера, т.е. если все ок, то result == '<html><body>ваша заявка принята</body></html>', или что-то в этом духе, но на ридерект никакой реакции не будет. Можешь в скипрт добавить еще одну строчку: print result и можно посмотреть на результат
     
    1 person likes this.
  8. sultan128

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

    Joined:
    6 Apr 2008
    Messages:
    45
    Likes Received:
    37
    Reputations:
    -5
    lo0
    Спасибо! Посмотри в ПМ.
     
  9. lo0

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

    Joined:
    6 Mar 2006
    Messages:
    113
    Likes Received:
    20
    Reputations:
    14
    Начнем с "бесконечно" или while True
    Если добавить данный блок, то скрипт у тя будет работать до тех пор, пока ручками не остановишь (kill pid) + очень быстро будет обрабатываться. Поэтому добавим еще таймер.
    Комментарий к блоку для "записи в файл" укажу в исходнике.
    Code:
    import urllib2, urllib, time
    from random import randrange
    
    urllib2.install_opener(urllib2.build_opener())
    params = {'name':'Свое значение',
              'title':'Свое значение',
              'city':'Свое значение',
              'phone':'Свое значение',
              'email':'Свое значение',
              'question':'Свое значение',
              'answer':'Свое значение',
              'source':'Свое значение'}
    while True:
        pause = randrange(1,10) # К перем. pause будет присвоено значение от 1 до 10
        filehandle = open('result.txt', 'a')
        result = urllib2.urlopen('www.DOMAIN.com/cgi-bin/faq.cgi',urllib.urlencode(params)).read()
        filehandle.write(result) #Пишим результат в фалй result.txt
        time.sleep(pause * 60) # На сколько нужно сделать паузу (остановить вып. скрипта) в секундах
        filehandle.close ()
    Все ответы/результаты будут записаны в файл result.txt в том каталоге, где и скрипт лежит.
    Таймер будет останавливать скрипт "от 1 до 10" мин, т.к. * 60, но здесь можно установить любое свое значение.