如何从PHP中的Stackoverflow API读取GZIP-ed响应?

时间:2011-12-20 21:01:26

标签: php gzip

如何从PHP中读取Stackoverflow API的响应?回复是GZIP-ed。我发现例如以下建议:

$url = "http://api.stackoverflow.com/1.1/questions/" . $question_id;
$data = file_get_contents($url);
$data = http_inflate($data);

但函数http_inflate()在我正在使用的安装上不可用。

还有其他一些简单的方法可以实现吗?

2 个答案:

答案 0 :(得分:19)

很酷的方式 http://www.php.net/manual/en/wrappers.compression.php

请注意使用流包装器 compress.zlib

$url = "compress.zlib://http://api.stackoverflow.com/1.1/questions/" . $question_id; 
echo $data = file_get_contents($url, false, stream_context_create(array('http'=>array('header'=>"Accept-Encoding: gzip\r\n"))));

或使用curl

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => $url
  , CURLOPT_HEADER => 0
  , CURLOPT_RETURNTRANSFER => 1
  , CURLOPT_ENCODING => 'gzip'
));
echo curl_exec($ch);

edited-- 删除了其他方法,因为它们不发送Accept-Encoding http标头。

答案 1 :(得分:0)

使用它来获得 gzip 编码的 json 响应,它就像一个魅力

function get_gzip_json($url) {
 $ch = curl_init();
 curl_setopt_array($ch, array(
   CURLOPT_URL => $url,
   CURLOPT_HEADER => 0,
   CURLOPT_RETURNTRANSFER => 1,
   CURLOPT_ENCODING => 'gzip',
 ));

 $json = curl_exec($ch);
 $json= mb_convert_encoding($json, "UTF-8", "UTF-8"); 

 return $json;
}