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 :: Версия для печати :: Мониторинг стороннего сайта с авторизацией
Форумы портала PHP.SU » » HTTP и PHP » Мониторинг стороннего сайта с авторизацией

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

1. Tmin10 - 25 Мая, 2011 - 20:18:34 - перейти к сообщению
Хочу написать мониторинг стороннего сайта, на котором нужна авторизация.
Чем лучше реализовать Curl'ом или на сокетах?
Можно ли полностью модифицировать заголовки, передаваемые на сайт?
2. EuGen - 25 Мая, 2011 - 20:19:56 - перейти к сообщению
Tmin10 пишет:
Чем лучше реализовать Curl'ом или на сокетах?

Лучше curl. Если запросов много, то curl_multi
Tmin10 пишет:
Можно ли полностью модифицировать заголовки, передаваемые на сайт?

Можно.
3. Tmin10 - 25 Мая, 2011 - 20:34:49 - перейти к сообщению
А много это сколько?
4. EuGen - 25 Мая, 2011 - 20:35:39 - перейти к сообщению
Достаточно для того, чтобы задуматься об оптимизации. Я ведь не знаю заранее, как часто Вы хотите мониторить, как долго отвечает сторонний сайт и т.п.
5. Tmin10 - 25 Мая, 2011 - 20:37:33 - перейти к сообщению
Не более пары запросов в секунду, пинг до сайта небольшой (>100)
6. Tmin10 - 06 Июня, 2011 - 23:02:31 - перейти к сообщению
А как сделать параллельные запросы, сейчас уже при 5 запросах время загрузки страницы скрипта 9 секунд, мне же нужно 10-15 запросов?
7. DeepVarvar - 06 Июня, 2011 - 23:19:07 - перейти к сообщению
делать запросы заранее, а на страницу выдавать готовые на текущий момент результаты.
8. Tmin10 - 06 Июня, 2011 - 23:24:14 - перейти к сообщению
Мне все вместе надо, они друг с другом сравниваются и выдаётся заключение.
Где стоит оптимизировать скрипт?
9. Tmin10 - 07 Июня, 2011 - 21:16:13 - перейти к сообщению
Решил попробовать curl_multi и вот думаю, как мне получить код страничек после
PHP:
скопировать код в буфер обмена
  1. do {
  2.     curl_multi_exec($mh,$running);
  3. } while ($running > 0);


Использую пример из документации:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // create both cURL resources
  3. $ch1 = curl_init();
  4. $ch2 = curl_init();
  5.  
  6. // set URL and other appropriate options
  7. curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
  8. curl_setopt($ch1, CURLOPT_HEADER, 0);
  9. curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
  10. curl_setopt($ch2, CURLOPT_HEADER, 0);
  11.  
  12. //create the multiple cURL handle
  13. $mh = curl_multi_init();
  14.  
  15. //add the two handles
  16.  
  17. $running=null;
  18. //execute the handles
  19. do {
  20.     curl_multi_exec($mh,$running);
  21. } while ($running > 0);
  22.  
  23. //close the handles
  24.  
  25. ?>
10. Tmin10 - 08 Июня, 2011 - 18:03:25 - перейти к сообщению
Никто не работал с multi?
11. Мелкий - 08 Июня, 2011 - 20:08:35 - перейти к сообщению
Функция curl_multi_getcontent

Смотрите комментарии к функциям, много чего полезного можно найти: http://php.net/manual/ru/functio...l-multi-exec.php
12. Tmin10 - 19 Июня, 2011 - 11:22:21 - перейти к сообщению
Что то не получается:

PHP:
скопировать код в буфер обмена
  1.  
  2. for ($qfood=1; $qfood<6; $qfood++)
  3. {
  4. $ch[$qfood] = curl_init("http://сайтик.com/en/$qfood");
  5. curl_setopt($ch[$qfood], CURLOPT_RETURNTRANSFER, 1);
  6. //curl_setopt($ch, CURLOPT_HEADER, 0);
  7. curl_setopt($ch[$qfood], CURLOPT_COOKIE, "тут куки");
  8. curl_multi_add_handle($mh,$ch[$qfood]);
  9. }
  10. //дальше что то непонятное
  11. $active = null;
  12. do {
  13.     $mrc = curl_multi_exec($mh, $active);
  14. } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  15.  
  16. while ($active && $mrc == CURLM_OK) {
  17.     if (curl_multi_select($mh) != -1) {
  18.         do {
  19.             $mrc = curl_multi_exec($mh, $active);
  20.         } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  21.     }
  22. }
  23. //тут пытаюсь получить что-то
  24. $picsArr[1] = curl_multi_getcontent($mh);
  25. $picsArr[2] = curl_multi_getcontent($mh);
  26. $picsArr[3] = curl_multi_getcontent($mh);
  27. $picsArr[4] = curl_multi_getcontent($mh);
  28. $picsArr[5] = curl_multi_getcontent($mh);
  29.  
  30. //но ничего((
  31. print_r($picsArr);
  32.  

получаю ошибки для 25-29 строк:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Warning:  curl_multi_getcontent(): supplied resource is not a valid cURL handle resource in ...

Кстати, если всё-таки код страничек получается, то выгода в скорости есть в 3-4 раза.
13. Slavenin - 19 Июня, 2011 - 13:50:22 - перейти к сообщению
мультипоточность php
14. Tmin10 - 19 Июня, 2011 - 13:59:19 - перейти к сообщению
Спасибо, попробую разобраться.

Отлично получилось, получаю 3.23277 секунды с мульти против 7.83426 секунд последовательно.

10 запросов даже за 4.03198 секунды!

 

Powered by ExBB FM 1.0 RC1