问题:如何使用 curl 解码“Content-Encoding: gzip, 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; 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 行。

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

找到下面的响应: GEThttp://www.dealstan.com/

200 OK 18.87 kB 490 ms 查看请求 查看响应标头

缓存控制:max-ageu003d0,无缓存

Cf 射线:18be7f54f8d80f1b-IAD

连接:保持活动

内容编码:gzip、gzip u003du003du003du003du003du003du003du003du003du003du003du003du003du003d>?怀疑这个,有人知道吗?

内容类型:文本/html;字符集u003dUTF-8

日期:格林威治标准时间 2014 年 11 月 19 日星期三 18:33:39

服务器:cloudflare-nginx

设置 Cookie:__cfduidu003dd1cff1e3134c5f32d2bddc10207bae0681416422019;到期u003d格林威治标准时间 15 年 11 月 19 日星期四 18:33:39;路径u003d/;域名u003d.dealstan.com; HttpOnly

传输编码:分块

变化:接受编码

X 页面速度:1.8.31.2-3973

X-Pingback:http://www.dealstan.com/xmlrpc.php

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

H4

任何人都知道如何使用标题“内容编码: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);
Logo

开发云社区提供前沿行业资讯和优质的学习知识,同时提供优质稳定、价格优惠的云主机、数据库、网络、云储存等云服务产品

更多推荐