<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Pais porrada de Bethrezen &#187; curl</title> <atom:link href="http://blog.bethrezen.ru/tag/curl/feed" rel="self" type="application/rss+xml" /><link>http://blog.bethrezen.ru</link> <description>Блог веб-программиста</description> <lastBuildDate>Sat, 27 Aug 2011 08:51:33 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.2.1</generator> <item><title>Декодируем gzip страницу на PHP</title><link>http://blog.bethrezen.ru/2009/09/curl-content-type-gzip-decode-in-php.html</link> <comments>http://blog.bethrezen.ru/2009/09/curl-content-type-gzip-decode-in-php.html#comments</comments> <pubDate>Fri, 04 Sep 2009 06:08:17 +0000</pubDate> <dc:creator>Bethrezen</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[curl]]></category> <category><![CDATA[gzip]]></category> <category><![CDATA[php]]></category> <category><![CDATA[tips]]></category><guid
isPermaLink="false">http://blog.bethrezen.ru/?p=195</guid> <description><![CDATA[Недавно при разработке одного сайта, столкнулся с проблемой декодирования на PHP полученной через curl страницы, сжатой в gzip. Допустим у нас есть код, который делает запрос через php-CURL с возвращением заголовков: $ch = curl_init&#40;&#41;; curl_setopt&#40;$ch, CURLOPT_URL,$url&#41;; &#160; //curl_setopt ($ch, CURLOPT_VERBOSE, 2); // Отображать детальную информацию о соединении curl_setopt &#40;$ch, CURLOPT_USERAGENT, 'Mozilla/5.0'&#41;; //Прописываем User Agent, чтобы [...]]]></description> <content:encoded><![CDATA[<p>Недавно при разработке одного сайта, столкнулся с проблемой декодирования на PHP полученной через <strong>curl</strong> страницы, сжатой в <strong>gzip</strong>.</p><p>Допустим у нас есть код, который делает запрос через php-CURL с возвращением заголовков:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #000088;">$ch</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #990000;color: #8FB394;">curl_init</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #990000;color: #8FB394;">curl_setopt</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_URL<span style="color: #339933;color: #CCC;">,</span><span style="color: #000088;">$url</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
 <span style="color: #666666; font-style: italic;color: #CDC;">//curl_setopt ($ch, CURLOPT_VERBOSE, 2); // Отображать детальную информацию о соединении</span>
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_USERAGENT<span style="color: #339933;color: #CCC;">,</span> <span style="color: #0000ff;">'Mozilla/5.0'</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #666666; font-style: italic;color: #CDC;">//Прописываем User Agent, чтобы приняли за своего</span>
&nbsp;
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>  <span style="color: #666666; font-style: italic;color: #CDC;">// Возвращать результат</span>
&nbsp;
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_HEADER<span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #666666; font-style: italic;color: #CDC;">// Наши заголовочки</span>
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLINFO_HEADER_OUT<span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">1</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span> <span style="color: #666666; font-style: italic;color: #CDC;">// Где то наткнулся на этот параметр, решил оставить</span>
 <span style="color: #990000;color: #8FB394;">curl_setopt</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;color: #CCC;">,</span> CURLOPT_CONNECTTIMEOUT<span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">30</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
&nbsp;
 <span style="color: #000088;">$result</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #990000;color: #8FB394;">curl_exec</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span></pre></div></div><p>В итоге получаем в $result нашу страницу с заголовками сервера. Проверим, закодированна ли она и дешифруем её, если нужно:</p><div
class="wp_syntax"><div
class="code"><pre class="php" style="font-family:monospace;color: #FCFFBA;"><span style="color: #b1b100;color:#DD2A24;font-weight:bold;">if</span> <span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #990000;color: #8FB394;">strstr</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;color: #111;">&quot;Content-Encoding: gzip&quot;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span>
 <span style="color: #009900;color: #CCC;">&#123;</span>
 <span style="color: #000088;">$result</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #990000;color: #8FB394;">preg_replace</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #0000ff;color: #111;">&quot;/(.*)Content\-Encoding: gzip\s+/isU&quot;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #0000ff;color: #111;">&quot;&quot;</span><span style="color: #339933;color: #CCC;">,</span><span style="color: #000088;">$result</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #000088;">$result</span> <span style="color: #339933;color: #CCC;">=</span> <span style="color: #990000;color: #8FB394;">gzinflate</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #990000;color: #8FB394;">substr</span><span style="color: #009900;color: #CCC;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #339933;color: #CCC;">,</span> <span style="color: #cc66cc;color: #DDD;">13</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #009900;color: #CCC;">&#41;</span><span style="color: #339933;color: #CCC;">;</span>
 <span style="color: #009900;color: #CCC;">&#125;</span></pre></div></div><p>Вот и всё. Если Вам нужно просто gzip контент расшифровать, то можно в substr заменить 13 на 10. (+3 из-за \n после заголовков).</p> ]]></content:encoded> <wfw:commentRss>http://blog.bethrezen.ru/2009/09/curl-content-type-gzip-decode-in-php.html/feed</wfw:commentRss> <slash:comments>6</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using apc
Page Caching using apc
Database Caching 26/41 queries in 0.022 seconds using apc

Served from: blog.bethrezen.ru @ 2012-02-06 13:52:21 -->
