Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите со скриптом, использующим curl()
Форумы портала PHP.SU » » Вопросы новичков » Помогите со скриптом, использующим curl()

Страниц (1): [1]
 

1. Edward - 17 Сентября, 2011 - 15:56:40 - перейти к сообщению
Добрый день, товарищи.

Есть необходимость написания скрипта, который отправляет email с помощью вот этого сервиса: http://network-hack[dot]com/smtp[dot]html
Но там есть капча. Капча всегда имеет одни адрес: http://network-hack[dot]com/componen[dot][dot][dot]ion.php?imtype=1

Я не могу понять как действовать. Смысла сначала запрашивать страницу http://network-hack[dot]com/smtp[dot]html , а потом парсить оттуда картинку капчи нет, т. к. она всегда имеет 1 адрес. Я попробовал обращаться сразу по адресу http://network-hack[dot]com/componen[dot][dot][dot]ion.php?imtype=1 , вводить капчу, а потом отправлять запрос на отправку почты

PHP:
скопировать код в буфер обмена
  1.  
  2. empty_cookie ();
  3.  
  4.  
  5. $url = 'http://network-hack.com/index.php?option=com_chronocontact&task=send&chronoformname=eml&Itemid=31';
  6.  
  7. $send_data = 'text_0=awgwg%40union.com&text_1=edward.pro10%40gmail.com&text_2=%D0%96%D0%B5%D0%BD%D1%8F&text_3=%D0%9F%D0%BE%D0%BB%D0%B5+%D1%82%D0%B5%D0%BC%D0%B0&text_6=%D0%9F%D0%BE%D0%BB%D0%B5+%D1%82%D0%B5%D0%BA%D1%81%D1%82&chrono_verification='.$_POST['cap'].'&button_9=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C&2996cb631ecf797840f87db2a6767833=1&1cf1=34ac6fb0a9dec83fe8652bddfcaac94f';
  8.  
  9. $result = sendMail( $url, $send_data );
  10.  
  11. echo $result;
  12.  
  13. function sendMail ( $url, $send_data ) {
  14. global $cookie;
  15.  
  16.   $data = curl_init( $url );
  17.   curl_setopt($data, CURLOPT_HEADER, 1);
  18.   curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
  19.   //curl_setopt($data, CURLOPT_FOLLOWLOCATION, 1);
  20.   curl_setopt($data, CURLOPT_COOKIEFILE, $cookie);
  21.   curl_setopt($data, CURLOPT_COOKIEJAR, $cookie);
  22.   curl_setopt($data, CURLOPT_SSL_VERIFYPEER, false);
  23.   curl_setopt($data, CURLOPT_SSL_VERIFYHOST, false);
  24.   curl_setopt( $data, CURLOPT_POST, 1 );
  25.   curl_setopt( $data, CURLOPT_POSTFIELDS, $send_data );
  26.   $code = curl_exec($data);
  27.   if ( !$code ) return false;
  28.  
  29. //  $code = mb_convert_encoding($code,'cp1251','utf-8');
  30.   return $code;
  31.  
  32. }
  33.  


Нифига не получается, на страницу выводится просто HTTP ответ от сервера. Знающие, помогите пожалуйста, очень нужно, готов отблагодарить за $.
2. LIME - 17 Сентября, 2011 - 16:14:36 - перейти к сообщению
Edward пишет:
Смысла сначала запрашивать страницу http://network-hack[dot]com/smtp[dot]html , а потом парсить оттуда картинку капчи нет, т. к. она всегда имеет 1 адрес.

есть смысл
вам ставится кука которая соответствует картинке
вернее скорее всего картинка фомируется от куки
3. Edward - 17 Сентября, 2011 - 16:19:09 - перейти к сообщению
LIME пишет:
Edward пишет:
Смысла сначала запрашивать страницу http://network-hack[dot]com/smtp[dot]html , а потом парсить оттуда картинку капчи нет, т. к. она всегда имеет 1 адрес.

есть смысл
вам ставится кука которая соответствует картинке
вернее скорее всего картинка фомируется от куки

Т. е. можно предположить, что у них в БД хранится моя кука и все картинки, которые были мне выданы, и если прилетит распознанная капча, соответствующая моим кукам, то номер пройдет ?
4. caballero - 17 Сентября, 2011 - 16:21:37 - перейти к сообщению
Вообще то капча обычно генерится новая при каждом запрросе
не очен представляю как вы вообще можете что то вводить
5. LIME - 17 Сентября, 2011 - 16:23:57 - перейти к сообщению
Edward нет
можно предположить что при обращении на страницу вам ставится кука рандомная
и когда браузер обращается за картинкой(наверное знаете что это отдельный запрос)
то скрипт смотрит какая кука пришла и формирует картинку динамически
и потом сравнивает что ввели
соответствует ли это куке
по тому же алгоритму что и формирует капчу
это предположение надо поэкпериментировать
6. caballero - 17 Сентября, 2011 - 16:27:32 - перейти к сообщению
Цитата:
по тому же алгоритму что и формирует капчу

какому еще алгоритму

генерися рамдомный текст для капчи и записывается в сессию
затем сравниватся с тем что вы ввели
7. LIME - 17 Сентября, 2011 - 16:30:34 - перейти к сообщению
caballero вы правы
извините
(Добавление)
я "после вчерашнего " туплю жестоко ))
8. Edward - 17 Сентября, 2011 - 16:46:07 - перейти к сообщению
В общем получился такой код:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP header('Content-type: text/html; charset=windows-1251');
  3. @ini_set('max_execution_time',0);
  4.  
  5.  
  6. $cookie = dirname(__FILE__).'/cookie';
  7.  
  8.  
  9. //    FUNCTIONS
  10.  
  11. function empty_cookie () {
  12. global $cookie;
  13.  
  14. $f = fopen($cookie,'w+');
  15. fwrite($f,null);
  16. fclose($f);
  17.  
  18. return true;
  19. }
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28. //------------------------
  29.  
  30.  
  31. if ( !$_POST or empty($_POST['cap']) ) {
  32.  
  33. empty_cookie ();
  34.  
  35. $data = curl_init( 'http://network-hack.com/smtp.html' );
  36.   curl_setopt($data, CURLOPT_HEADER, 1);
  37.   curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
  38.   curl_setopt($data, CURLOPT_FOLLOWLOCATION, 1);
  39.   curl_setopt($data, CURLOPT_COOKIEFILE, $cookie);
  40.   curl_setopt($data, CURLOPT_COOKIEJAR, $cookie);
  41.   curl_setopt($data, CURLOPT_SSL_VERIFYPEER, false);
  42.   curl_setopt($data, CURLOPT_SSL_VERIFYHOST, false);
  43.   curl_exec($data);
  44.   curl_close($data);
  45.  
  46.   $data = curl_init( 'http://network-hack.com/components/com_chronocontact/chrono_verification.php?imtype=1' );
  47.   curl_setopt($data, CURLOPT_HEADER, 0);
  48.   curl_setopt($data, CURLOPT_RETURNTRANSFER, 0);
  49.   curl_setopt($data, CURLOPT_FOLLOWLOCATION, 1);
  50.   curl_setopt($data, CURLOPT_COOKIEFILE, $cookie);
  51.   curl_setopt($data, CURLOPT_COOKIEJAR, $cookie);
  52.   curl_setopt($data, CURLOPT_SSL_VERIFYPEER, false);
  53.   curl_setopt($data, CURLOPT_SSL_VERIFYHOST, false);
  54.   $img = curl_exec($data);
  55.  
  56.  
  57.     echo '<form name="ChronoContact_eml" action="http://odanonimmail/index2.php" method="POST">
  58.                 <i>Введи капчу !</i>
  59.                 '.$img.'
  60.                 <input type="text" name="cap" />
  61.                 <input type="submit" value="Send">
  62.    </form>
  63. <br><br>';
  64. curl_close($data);
  65. } else {
  66.  
  67.         $post = 'text_0=admin%40itrad.com&text_1=edward.pro10%40gmail.com&text_2=%D0%9C%D0%BE%D0%B4%D0%B5%D1%80&text_3=%D0%A2%D0%B5%D0%BC%D0%B0+%D1%81%D1%83%D0%BF%D0%B5%D1%80&text_6=%D0%A1%D1%83%D0%BF%D0%B5%D1%80+%D1%82%D0%B5%D0%BA%D1%81%D1%82&chrono_verification='.$_POST['cap'].'&button_9=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C&2996cb631ecf797840f87db2a6767833=1&1cf1=34ac6fb0a9dec83fe8652bddfcaac94f';
  68.  
  69.         $url = 'http://network-hack.com/index.php?option=com_chronocontact&task=send&chronoformname=eml&Itemid=31';
  70.  
  71.   $data = curl_init( $url );
  72.   curl_setopt($data, CURLOPT_HEADER, 1);
  73.   curl_setopt($data, CURLOPT_RETURNTRANSFER, 0);
  74.   curl_setopt($data, CURLOPT_FOLLOWLOCATION, 1);
  75.   curl_setopt($data, CURLOPT_COOKIEFILE, $cookie);
  76.   curl_setopt($data, CURLOPT_COOKIEJAR, $cookie);
  77.   curl_setopt($data, CURLOPT_SSL_VERIFYPEER, false);
  78.   curl_setopt($data, CURLOPT_SSL_VERIFYHOST, false);
  79.   curl_setopt($data, CURLOPT_POST, 1);
  80.   curl_setopt($data, CURLOPT_POSTFIELDS, $post);
  81.   curl_exec($data);
  82.   curl_close($data);
  83.  
  84.  
  85. }
  86. ?>
  87.  


Я думал код:

PHP:
скопировать код в буфер обмена
  1. $data = curl_init( 'http://network-hack.com/components/com_chronocontact/chrono_verification.php?imtype=1' );
  2.   curl_setopt($data, CURLOPT_HEADER, 0);
  3.   curl_setopt($data, CURLOPT_RETURNTRANSFER, 0);
  4.   curl_setopt($data, CURLOPT_FOLLOWLOCATION, 1);
  5.   curl_setopt($data, CURLOPT_COOKIEFILE, $cookie);
  6.   curl_setopt($data, CURLOPT_COOKIEJAR, $cookie);
  7.   curl_setopt($data, CURLOPT_SSL_VERIFYPEER, false);
  8.   curl_setopt($data, CURLOPT_SSL_VERIFYHOST, false);
  9.   $img = curl_exec($data);
  10.  
  11.  
  12.     echo '<form name="ChronoContact_eml" action="http://odanonimmail/index2.php" method="POST">
  13.                 <i>Введи капчу !</i>
  14.                 '.$img.'
  15.                 <input type="text" name="cap" />
  16.                 <input type="submit" value="Send">
  17.    </form>
  18. <br><br>';

будет выводить картинку капчи, но выводится просто абракадабра



Если у кого есть желание и знания, как сделать рабочим этот скрипт, прошу написать в асю: 490758902, я опишу подробно что сделать, на самом деле тот кто знает, не долго будет разбираться, о цене договоримся !
9. caballero - 17 Сентября, 2011 - 17:06:33 - перейти к сообщению
Конечно абракадабра
картини выводятся тэгом <img> и никак иначе

абракадабру наждо сохранить в файл и натравить на нее <img src="файл с аьракадаьрой">
10. LIME - 17 Сентября, 2011 - 17:12:40 - перейти к сообщению
имхо проще хидером установить куки в браузер из файла кук на сервере
и вставить такойже тег изображения http://network-hack[dot]com/componen[dot][dot][dot]ion.php?imtype=1
(Добавление)
хорошо бы еще продумать логику при ошибочном вводе капчи
(Добавление)
ойей снова тупанул))
может мне не писать сегодня в форум?))
нельзя поставить куку для другого домена
извините

 

Powered by ExBB FM 1.0 RC1