Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “如何解码”;内容编码:gzip,gzip“;使用卷曲?_Php_Html_Curl_Nginx_Gzip - Fatal编程技术网

Php “如何解码”;内容编码:gzip,gzip“;使用卷曲?

Php “如何解码”;内容编码:gzip,gzip“;使用卷曲?,php,html,curl,nginx,gzip,Php,Html,Curl,Nginx,Gzip,我正在尝试使用以下代码使用CURL解码网页www.dealstan.com: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // Define target site curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return page in string curl_setopt($cr, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U

我正在尝试使用以下代码使用CURL解码网页www.dealstan.com:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // Define target site
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return page in string
curl_setopt($cr, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2');
curl_setopt($ch, CURLOPT_ENCODING , "gzip");     
curl_setopt($ch, CURLOPT_TIMEOUT,5); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow redirects

$return = curl_exec($ch); 
$info = curl_getinfo($ch); 
curl_close($ch); 

$html = str_get_html("$return");
echo $html;
但是,它显示出一些垃圾特性

"��}{w�6.����9� X�N���.........." 大约100行

我试着在Hull.it中找到响应,发现了一个有趣的点,看起来html被编码了两次(只是一个猜测,基于响应)

请在下面找到答案: 得到

200正常18.87 kB 490毫秒 查看请求查看响应 标题

缓存控制:最大年龄=0,无缓存

Cf射线:18be7f54f8d80f1b IAD

连接:保持活力

内容编码:gzip,gzip=================>?怀疑这一点,有人知道吗

内容类型:text/html;字符集=UTF-8

日期:2014年11月19日星期三18:33:39 GMT

服务器:cloudflare nginx

设置Cookie:uuu cfduid=d1cff1e3134c5f32bddc10207bae0681416422019;expires=Thu,2015年11月19日18:33:39 GMT;path=/;domain=.dealstan.com;HttpOnly

传输编码:分块

改变:接受编码

X页速度:1.8.31.2-3973

X-Pingback:

X-Powered-By:HHVM/3.2.0 身体视图原始

H4SIAAAAAAAAAA5V8Q5AOWRBK27ZTU/U2BDU2BDU2BDS2583F/PJFVOQOQOZNUXKVJ7PWOYA/qeAb3y83LbYHs/3Hv79wKm/2N5CZYJVTCWU1XYTEYZLNQYUWBDTHEELCYZRRP/1E7ES3+wL3Vfb

任何人都知道如何解码标题为“Content Encoding:gzip,gzip”的响应

该网站正在firefox、chrome等浏览器中正常加载,但我无法使用CURL进行解码


请帮我解码这个问题?

您可以通过修剪标题并使用gzinflate来解码它

$url = "http://www.dealstan.com"

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // Define target site
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return page in string
curl_setopt($cr, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2');
curl_setopt($ch, CURLOPT_ENCODING, "gzip");     
curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow redirects

$return = curl_exec($ch); 
$info = curl_getinfo($ch); 
curl_close($ch); 

$return = gzinflate(substr($return, 10));
print_r($return);

在google中,我发现了mozilla中报告的一个类似问题的bug,但我找不到该bug的任何补丁,因为该站点在firefox中加载正确,他们应该已经解决了这个问题DD。垃圾正是回来的东西,它在Safari中也显示了这一点。因此,它基本上是在返回Gzip页面,尽管它是目标是内容类型为text/html。(是这样的吗?在我看来,他们的网站刚刚被破坏。正如我所期望的,如果我在Safari中浏览GZIP数据,它会显示GZIP数据的文本表示…)注意:它似乎是在传输过程中压缩的,而且还发送了一个压缩版本的页面,所以我需要将它压缩两次以查看实际的HTML。刚刚检查了其他浏览器Firefox和Chrome成功地向我显示了该网页;Opera和Safari向我显示了原始的gzip数据。因此,我认为该网站配置错误,正在压缩page两次,但一些网络浏览器检测到这种中断,并为您解码两次。我不确定我会相信它总是这样被破坏,因为迟早他们会意识到他们的网站在一些主要浏览器中被破坏,并修复配置……正如您所说,他们解决了问题,现在,我可以用解决任何问题。无论如何,如果我们知道firefox如何正确处理它,这将有助于我们将来解决类似的问题。是的,我认为这是一种方法。这种方法实际上是将内容解压缩两次,因为Curl将解压缩一次,然后您将手动再次解压缩。但您可能需要检查响应e在手动解压之前(如果仍然是gzip,则响应中的前两个字节将为1f 8b),因为在某个时候,该网站肯定会收到Safari、Opera等用户的一些投诉,并修复导致双重编码内容的配置问题…我修改了我测试的实际剪切的答案(我没有str_get_html)。那里的print_r($return)正确吗?另请参见哪个包含更通用的函数。