4Сен/096
Декодируем gzip страницу на PHP
Недавно при разработке одного сайта, столкнулся с проблемой декодирования на PHP полученной через curl страницы, сжатой в gzip.
Допустим у нас есть код, который делает запрос через php-CURL с возвращением заголовков:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); //curl_setopt ($ch, CURLOPT_VERBOSE, 2); // Отображать детальную информацию о соединении curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0'); //Прописываем User Agent, чтобы приняли за своего curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // Возвращать результат curl_setopt ($ch, CURLOPT_HEADER, 1); // Наши заголовочки curl_setopt ($ch, CURLINFO_HEADER_OUT, 1); // Где то наткнулся на этот параметр, решил оставить curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 30); $result = curl_exec($ch); |
В итоге получаем в $result нашу страницу с заголовками сервера. Проверим, закодированна ли она и дешифруем её, если нужно:
if (strstr($result,"Content-Encoding: gzip")) { $result = preg_replace("/(.*)Content\-Encoding: gzip\s+/isU","",$result); $result = gzinflate(substr($result, 13)); } |
Вот и всё. Если Вам нужно просто gzip контент расшифровать, то можно в substr заменить 13 на 10. (+3 из-за \n после заголовков).
Понравилась статья?
Комментарии (6)
Пинги (0)
(подписаться на новые комментарии в этой ветке)
Нет обратных ссылок на эту запись.
Сентябрь 4th, 2009 - 12:47
Спасибо! Очень помогло! Как раз искал решение.
Сентябрь 11th, 2009 - 10:22
Ноябрь 17th, 2009 - 00:55
ty usefull
Январь 22nd, 2010 - 23:15
Funny people 🙂 Is so hard to look to curl docs?
Simply use curl option:
curl_setopt($ch,CURLOPT_ENCODING,»gzip»);
Январь 23rd, 2010 - 22:50
А если у нас не в гзипе приходит?
Октябрь 28th, 2011 - 14:13
curl_setopt($curl,CURLOPT_ENCODING,’gzip,deflate’);