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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Телевизор
Отправлено: 04 Октября, 2015 - 20:19:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 369
Дата рег-ции: Март 2010  
Откуда: с яндекса


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




скажите пожалуйста,
есть ли готовые решения
чтобы curl-ом взять заголовки и тело страницы поместив все это в массив.


уже имею скрипт для получения заголовков но как туда добавить контент не понимаю и не получается.

контент предполагаю в base64 запихнуть


PHP:
скопировать код в буфер обмена
  1.  
  2. function arrGetHeader($url,$timeOut){
  3.        
  4. $ch = curl_init();
  5. curl_setopt($ch, CURLOPT_URL, $url);
  6. curl_setopt($ch, CURLOPT_HEADER, true);
  7. curl_setopt($ch, CURLOPT_NOBODY, true);
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  9. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  10. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  11. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
  12. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
  13. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
  14. curl_setopt($ch, CURLOPT_TIMEOUT, $timeOut);
  15. $HeaderResult = curl_exec($ch);
  16.  
  17. if($HeaderResult === false) {
  18.  $headers = array('error' => array('code'=>curl_errno($ch),'msg'=>curl_error($ch)));
  19. } else {
  20.  $headers = array();
  21.  // Split the string on every "double" new line.
  22.  $arrRequests = explode("\r\n\r\n", $HeaderResult);
  23.  // Loop of response headers. The "count() -1"
  24.  //is to avoid an empty row for the extra line break before the body of the response.
  25.  for ($index = 0; $index < count($arrRequests) -1; $index++) {
  26.   foreach (explode("\r\n", $arrRequests[$index]) as $i => $line) {
  27.         if ($i === 0) {
  28.                 $headers[$index]['http_code'] = $line;
  29.         } else {
  30.                 list ($key, $value) = explode(': ', $line);
  31.                 $headers[$index][$key] = $value;
  32.         }
  33.   }
  34.  }
  35. }
  36.  
  37. return $headers;
  38.  
  39. }
  40.  
  41. print_r(arrGetHeader('https://www.google.ru/','10'));
  42.  



CODE (htmlphp):
скопировать код в буфер обмена
  1. // результат скрипта:
  2.  
  3. (
  4. [0] => Array
  5.  (
  6.   [http_code] => HTTP/1.1 200 OK
  7.   [Server] => nginx
  8.   [Date] => Sun, 04 Oct 2015 09:05:54 GMT
  9.   [Content-Type] => text/html; charset=windows-1251
  10.   [Connection] => keep-alive
  11.   [Vary] => Accept-Encoding
  12.   [Expires] => Thu, 19 Nov 1981 08:52:00 GMT
  13.   [Pragma] => no-cache
  14.  )
  15. )



просто хотелось бы за 1 запрос взять и заголовок и тело страницы а потом с этим всем манипулировать

(Отредактировано автором: 04 Октября, 2015 - 20:31:05)

 
 Top
Panoptik
Отправлено: 04 Октября, 2015 - 21:31:59
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




CURLOPT_NOBODY - должно быть false или вообще убрать эту опцию
ну а контент отделен он хаголовков двойной пустой строкой

а заголовки находятся каждый в новой строке то есть пример

Цитата:
Заголовок1: значение
Заголовок2: значение
ЗагловокН: значение

Тело запроса


посему ваше не правильное разделение
Телевизор пишет:
 $arrRequests = explode("\r\n\r\n", $HeaderResult);


заголовки нужно разделять одним \r\n

PHP:
скопировать код в буфер обмена
  1. $response = curl_exec(...);
  2. list($headersStr, $body) = explode("\r\n\r\n", $response, 2);
  3. $headers = explode("\r\n", $headersStr);


-----
Just do it
 
 Top
Телевизор
Отправлено: 05 Октября, 2015 - 00:24:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 369
Дата рег-ции: Март 2010  
Откуда: с яндекса


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




Panoptik

спасибо за ваш отклик.


с большим гемороем решил вот так вот:

PHP:
скопировать код в буфер обмена
  1.        
  2. $aHeaderInfo = curl_getinfo($ch);
  3. $curlHeaderSize=$aHeaderInfo['header_size'];
  4. $sBody = trim(mb_substr($HeaderResult, $curlHeaderSize));
  5.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB