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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите с CURL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
bassay
Отправлено: 10 Декабря, 2010 - 16:18:40
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2010  
Откуда: Казань


Помог: 0 раз(а)




Доброго времени суток всем! Помогите разобраться с CURL

Мне нужно вытянуть со страницы /admin.php?mod=addnews&action=addnews значение user_hash (CMS DLE).
Проблема заключается в том что я не могу вывести эту страницу, выходит какая то белиберда.

Сам скрипт:

PHP:
скопировать код в буфер обмена
  1.  
  2.         $login = 'admin';
  3.         $password = 'admin';
  4.         $host = 'http://localhost/dle2';
  5.         $cookies = 'C:\xampp\htdocs\test2\my_cookies.txt';
  6.         $url = $host.'/admin.php';
  7.         $post = 'subaction=dologin&username='.urlencode($login).
  8.                     '&password='.urlencode($password).
  9.                     '&selected_language='.urlencode('Russian');
  10.         $useragent = 'Opera/9.25 (Windows NT 6.0; U; ru)';
  11.        
  12. // POST за основу взял статью http://forum.php.su/topic.php?forum=62&topic=31&postid=1243356433#1243356433
  13.         $ch = curl_init($url);
  14.         curl_setopt($ch, CURLOPT_POST, 1);
  15.         curl_setopt ($ch, CURLOPT_USERAGENT, $useragent);
  16.         $headers = array
  17.         (
  18.             'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  19.             'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
  20.             'Accept-Encoding: gzip,deflate',
  21.             'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'
  22.         );
  23.         curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
  24.         curl_setopt($ch, CURLOPT_REFERER, $host.'/admin.php');
  25.         curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  26.         curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookies);
  27.         curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
  28.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  29.         $result = curl_exec($ch);
  30.         curl_close($ch);
  31. // далее идет GET запрос
  32.  
  33.         $url2 = $host.'/admin.php?mod=addnews&action=addnews';
  34.         $ch = curl_init($url2);
  35.         curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
  36.         curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
  37.         curl_setopt($ch, CURLOPT_COOKIEJAR,  $cookies);
  38.         curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
  39.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  40.         $result = curl_exec($ch);
  41.         curl_close($ch);
  42.         echo $result;
  43.  


Объясните пожалуйста где я допускаю ошибку, я только недавно начал изучать ПЫх ПЫх , так что сильно не ругайтесь.
Заранее спасибо!
 
 Top
OrmaJever Модератор
Отправлено: 10 Декабря, 2010 - 16:54:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




используйте готовую функцию.
PHP:
скопировать код в буфер обмена
  1. function curl($url='', $post='', $referer='', $proxy='')
  2. {
  3.         $cl = curl_init();
  4.         curl_setopt($cl, CURLOPT_URL, $url);
  5.         curl_setopt($cl, CURLOPT_RETURNTRANSFER,1);
  6.         curl_setopt($cl, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.10');
  7.     curl_setopt($cl, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
  8.     curl_setopt($cl, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
  9.     if(!empty($post)) {curl_setopt($cl, CURLOPT_POST, 1); curl_setopt($cl, CURLOPT_POSTFIELDS, $post);}else{curl_setopt($cl, CURLOPT_POST, 0);}
  10.     if(!empty($referer)){curl_setopt($cl, CURLOPT_REFERER, $referer);}else{curl_setopt($cl,CURLOPT_REFERER, 1);}
  11.     if(!empty($proxy)) {curl_setopt($cl, CURLOPT_PROXY, $proxy);}
  12.     $ex=curl_exec($cl);
  13.     curl_close($cl);
  14.         return $ex;
  15. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
bassay
Отправлено: 10 Декабря, 2010 - 18:40:39
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2010  
Откуда: Казань


Помог: 0 раз(а)




Спасибо огромное!
Только не получается выдернуть значение
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <input type="hidden" name="user_hash" value="4865585e352731355494d2f41c1e05ba" />
  3.  


PHP:
скопировать код в буфер обмена
  1.  
  2. $line = curl($url2, '', '', '');
  3. preg_match("|name=user_hash value=([\d\w]+)|i",$line,$out2);
  4. print_r($out2);
  5.  


Массив пустой, не пойму в чем может даже быть.
Подскажите где ошибка!


PHP:
скопировать код в буфер обмена
  1.  
  2. $login = 'admin';
  3. $password = 'admin';
  4. $host = 'http://localhost/dle2';
  5. $url = $host.'/admin.php';
  6. $post = 'subaction=dologin&username='.urlencode($login).'&password='.urlencode($password).'&selected_language='.urlencode('Russian');
  7. $useragent = 'Opera/9.25 (Windows NT 6.0; U; ru)';
  8. $url2 = $host.'/admin.php?mod=addnews&action=addnews';
  9.  
  10.  
  11.  
  12.  
  13.  
  14. curl($url, $post, '', '');
  15. $line = curl($url2, '', '', '');
  16. preg_match("|name=user_hash value=([\d\w]+)|i",$line,$out2);
  17. print_r($out2);
  18.  
  19. function curl($url='', $post='', $referer='', $proxy='')
  20. {
  21.     $cl = curl_init();
  22.     curl_setopt($cl, CURLOPT_URL, $url);
  23.     curl_setopt($cl, CURLOPT_RETURNTRANSFER,1);
  24.     curl_setopt($cl, CURLOPT_USERAGENT, $useragent);
  25.     curl_setopt($cl, CURLOPT_COOKIEJAR,  'C:\xampp\htdocs\test2\my_cookies.txt');
  26.     curl_setopt($cl, CURLOPT_COOKIEFILE, 'C:\xampp\htdocs\test2\my_cookies.txt');
  27.  
  28.     if(!empty($post)) {
  29.                 curl_setopt($cl, CURLOPT_POST, 1);
  30.                 curl_setopt($cl, CURLOPT_POSTFIELDS, $post);}
  31.         else{
  32.                 curl_setopt($cl, CURLOPT_POST, 0);
  33.         }
  34.  
  35.     if(!empty($referer)){
  36.                 curl_setopt($cl, CURLOPT_REFERER, $referer);
  37.                 }
  38.         else{
  39.                 curl_setopt($cl,CURLOPT_REFERER, 1);
  40.         }
  41.  
  42.     if(!empty($proxy)) {
  43.                 curl_setopt($cl, CURLOPT_PROXY, $proxy);
  44.         }
  45.  
  46.     $ex=curl_exec($cl);
  47.     curl_close($cl);
  48.     return $ex;
  49. }
  50.  

(Добавление)
спасибо решение нашел сам!
PHP:
скопировать код в буфер обмена
  1.  
  2. curl($url, $post, '', '');
  3. $content = curl($url2, '', '', '');
  4.  
  5. preg_match_all("/name=\"user_hash\" value=\"[^>]+\" \/>/", $content, $out);
  6. $user_hash= $out[0][0];
  7. echo trim(substr($user_hash, 24, -4));
  8.  
 
 Top
OrmaJever Модератор
Отправлено: 10 Декабря, 2010 - 19:33:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




я сразу в первой регулярке заметил что кавычем нету а потом когда писал увидел второй код с кавычками. В php Нужно быть очень внимательный


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
bassay
Отправлено: 10 Декабря, 2010 - 19:46:09
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2010  
Откуда: Казань


Помог: 0 раз(а)




что то все равно не получается А?!

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

PHP:
скопировать код в буфер обмена
  1.  
  2. $url_newspost = $host.'/admin.php?mod=addnews&action=addnews';
  3. $title = urlencode('первая новость из скрипта');
  4. $short = urlencode('первая новость из скрипта short');
  5. $full = urlencode('первая новость из скрипта full');
  6. $referer = $host.'/admin.php?mod=addnews&action=addnews';
  7.  
  8. // post запрос
  9. $postnews ='
  10. title='.$title.'&
  11. newdate=&
  12. allow_date=yes&
  13. category%5B%5D=1&
  14. bbfont=0&
  15. bbsize=0&
  16. short_story='.$short.'&
  17. full_story='.$full.'&
  18. approve=1&allow_main=1&allow_comm=1&allow_rating=1&
  19. allow_br=1&
  20. vote_title=&
  21. frage=&
  22. vote_body=&
  23. catalog_url=&
  24. alt_name=&
  25. tags=&
  26. expires=&
  27. expires_action=0&
  28. meta_title=&
  29. descr=&
  30. keywords=&
  31. group_extra%5B2%5D=0&
  32. group_extra%5B3%5D=0&
  33. group_extra%5B4%5D=0&
  34. group_extra%5B5%5D=0&
  35. mod=addnews&
  36. action=doaddnews&
  37. user_hash='.$user_hash
  38. ;
  39.  
  40.  
  41. curl($url_newspost, $postnews, $referer);
  42.  
  43.  


подскажите чего не хватает... Закатив глазки

кстати вот сам запрос
CODE (htmlphp):
скопировать код в буфер обмена
  1. http://localhost/dle2/admin.php
  2.  
  3. POST /dle2/admin.php HTTP/1.1
  4. Host: localhost
  5. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729; .NET4.0E)
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  7. Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
  8. Accept-Encoding: gzip,deflate
  9. Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
  10. Keep-Alive: 115
  11. Connection: keep-alive
  12. Referer: http://localhost/dle2/admin.php?mod=addnews&action=addnews
  13. Cookie: PHPSESSID=frt4p4mkfj83r9ocaaa017hka0
  14. Content-Type: application/x-www-form-urlencoded
  15. Content-Length: 545
  16. title=%ED%E0%E7%E2%E0%ED%E8%E5&newdate=&allow_date=yes&category%5B%5D=1&bbfont=0&bbsize=0&short_story=%EF%F0%E8%E2%E5%F2+%EC%E8%F0&bbfont=0&bbsize=0&full_story=%EF%F0%E8%E2%E5%F2+%E1%EE%EB%FC%F8%EE%E9+%E1%F0%E0%F2&approve=1&allow_main=1&allow_comm=1&allow_rating=1&allow_br=1&vote_title=&frage=&vote_body=&catalog_url=&alt_name=&tags=&expires=&expires_action=0&meta_title=&descr=&keywords=&group_extra%5B2%5D=0&group_extra%5B3%5D=0&group_extra%5B4%5D=0&group_extra%5B5%5D=0&mod=addnews&action=doaddnews&user_hash=4865585e352731355494d2f41c1e05ba

(Отредактировано автором: 10 Декабря, 2010 - 20:34:48)

 
 Top
OrmaJever Модератор
Отправлено: 10 Декабря, 2010 - 21:40:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




bassay пишет:
подскажите чего не хватает...

1) Зачем столько даных в пост запросе? Половина пустых (keywords=&) можно убрать.
2) я думаю реферер совсем не нужен.
3) urlencode() тоже можно не использовать.
Вот убери эти 3 пункта и круг подозрения сузится.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
bassay
Отправлено: 11 Декабря, 2010 - 11:40:35
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2010  
Откуда: Казань


Помог: 0 раз(а)




не получается Огорчение
попробовал все варианты с реффер и без, urlencode()
даже понять не могу в чем может быть дело Однако


конечный вариант:
PHP:
скопировать код в буфер обмена
  1. $host = 'http://localhost/dle2';
  2. $url = $host.'/admin.php';
  3. // формируем новость
  4. $title = 'первая новость из скрипта';
  5. $title = urlencode('первая новость из скрипта');
  6.  
  7. $short = 'первая новость из скрипта short';
  8. $short = urlencode('первая новость из скрипта short');
  9.  
  10. $full = 'первая новость из скрипта full';
  11. $full = urlencode('первая новость из скрипта full');
  12.  
  13.  
  14. // сократил по максимуму или еще что то можно убрать?
  15. $postnews ='
  16. title='.$title.'&
  17. allow_date=yes&
  18. category%5B%5D=1&
  19. short_story='.$short.'&
  20. full_story='.$full.'&
  21. approve=1&allow_main=1&allow_comm=1&allow_rating=1&
  22. allow_br=1&
  23. expires_action=0&
  24. group_extra%5B2%5D=0&
  25. group_extra%5B3%5D=0&
  26. group_extra%5B4%5D=0&
  27. group_extra%5B5%5D=0&
  28. mod=addnews&
  29. action=doaddnews&
  30. user_hash='.$user_hash
  31. ;
  32. curl($url, $postnews);


выкладываю пост запрос:
CODE (htmlphp):
скопировать код в буфер обмена
  1. http://localhost/dle2/admin.php
  2.  
  3. POST /dle2/admin.php HTTP/1.1
  4. Host: localhost
  5. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729; .NET4.0E)
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  7. Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
  8. Accept-Encoding: gzip,deflate
  9. Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
  10. Keep-Alive: 115
  11. Connection: keep-alive
  12. Referer: http://localhost/dle2/admin.php?mod=addnews&action=addnews
  13. Cookie: PHPSESSID=frt4p4mkfj83r9ocaaa017hka0
  14. Content-Type: application/x-www-form-urlencoded
  15. Content-Length: 545
  16. title=%ED%E0%E7%E2%E0%ED%E8%E5&newdate=&allow_date=yes&category%5B%5D=1&bbfont=0&bbsize=0&short_story=%EF%F0%E8%E2%E5%F2+%EC%E8%F0&bbfont=0&bbsize=0&full_story=%EF%F0%E8%E2%E5%F2+%E1%EE%EB%FC%F8%EE%E9+%E1%F0%E0%F2&approve=1&allow_main=1&allow_comm=1&allow_rating=1&allow_br=1&vote_title=&frage=&vote_body=&catalog_url=&alt_name=&tags=&expires=&expires_action=0&meta_title=&descr=&keywords=&group_extra%5B2%5D=0&group_extra%5B3%5D=0&group_extra%5B4%5D=0&group_extra%5B5%5D=0&mod=addnews&action=doaddnews&user_hash=4865585e352731355494d2f41c1e05ba

(Отредактировано автором: 11 Декабря, 2010 - 13:07:42)

 
 Top
JustUserR
Отправлено: 11 Декабря, 2010 - 12:48:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




OrmaJever пишет:
urlencode() тоже можно не использовать.
Использование функции urlencode осуществляющей приведение информационных полей HTTP-запроса на более высокий уровень экранирования в действительности является обязательным дейсвием - дело в том что для осуществления корректного трактования запроса необходима реализация именно покомпонентного urlencode-кодирования отдельных информационных полей - а в случае применения данной операции к полой строке запроса она не является целесообразной поскольку не производит отеление структурных и инфрмационных компонентов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
bassay
Отправлено: 11 Декабря, 2010 - 13:05:58
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2010  
Откуда: Казань


Помог: 0 раз(а)




получается urlencode() можно не использовать.
 
 Top
JustUserR
Отправлено: 11 Декабря, 2010 - 21:06:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




bassay пишет:
Получается urlencode() можно не использовать.
Использование функции urlencode является обязательным при осуществлении создания целевой строки запроса или информационных полей HTTP-документа - для обеспечения корректного уровеня представление пересылаемых данных и управляющих компонентов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
bassay
Отправлено: 11 Декабря, 2010 - 21:35:19
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2010  
Откуда: Казань


Помог: 0 раз(а)




JustUserR пишет:
Использование функции urlencode является обязательным при осуществлении создания целевой строки запроса или информационных полей HTTP-документа - для обеспечения корректного уровеня представление пересылаемых данных и управляющих компонентов

я ее использую, почему не отсылает в чем может быть дело?
(Добавление)
помоги сформировать запрос
CODE (html):
скопировать код в буфер обмена
  1. title=%ED%E0%E7%E2%E0%ED%E8%E5&newdate=&allow_date=yes&category%5B%5D=1&bbfont=0&bbsize=0&short_story=%EF%F0%E8%E2%E5%F2+%EC%E8%F0&bbfont=0&bbsize=0&full_story=%EF%F0%E8%E2%E5%F2+%E1%EE%EB%FC%F8%EE%E9+%E1%F0%E0%F2&approve=1&allow_main=1&allow_comm=1&allow_rating=1&allow_br=1&vote_title=&frage=&vote_body=&catalog_url=&alt_name=&tags=&expires=&expires_action=0&meta_title=&descr=&keywords=&group_extra%5B2%5D=0&group_extra%5B3%5D=0&group_extra%5B4%5D=0&group_extra%5B5%5D=0&mod=addnews&action=doaddnews&user_hash=4865585e352731355494d2f41c1e05ba


где нужно вставлять urlencode()
 
 Top
JustUserR
Отправлено: 12 Декабря, 2010 - 19:12:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




bassay пишет:
Я ее использую, почему не отсылает в чем может быть дело?
Необходимость использования функции urlencode обеспечена требованя к явному разграничению уровней представления передаваемый информационных полей и заголовочных компонентов - по этой причине ее корректная обусловленность осуществляется только в случае использования кодирования отдельных компонентов с осуществлением их последующего соединения Кроме того возможной причиной некорректной работоспособности приведенного вами PHP-скрипта является использования несопоставимого представления передаваемых данных - относительно представления к целевой кодовой таблице - котороые может специфицироваться в завсмости от метода кодирования и передачи информационных полей


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
bassay
Отправлено: 13 Декабря, 2010 - 21:22:42
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2010  
Откуда: Казань


Помог: 0 раз(а)




я нихера не понял!
 
 Top
JustUserR
Отправлено: 14 Декабря, 2010 - 11:27:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




bassay пишет:
Я нихера не понял!
Передача информационных полей HTTP-заголовка и его содержмого осуществляется в обобщенном 7bit-ном представлении которые включает в себя исключительно ASCII-символы с индексными позициями меньшими 127 и не являющимися управяющими элементами - таким образом для передаваемых данных должна быть проведена проверка и MIME-кодирование при необходимости - которое должно проводиться *отдельно* для вкелючаемых компонентов а не всего HTTP-документа в совокупности


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
bassay
Отправлено: 14 Декабря, 2010 - 12:25:17
Post Id



Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2010  
Откуда: Казань


Помог: 0 раз(а)




это понятно, но почему мой скрипт не отправляет новость на сайт. Может быть дело. то что я неправильно сформировал запрос или еще что то....????
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB