的Unix卷曲到PHP卷曲皈依
我已经返回API结果下面的bash curl命令我想的Unix卷曲到PHP卷曲皈依
curl -v -H 'Accept-Encoding:gzip,deflate,sdch' http://api.blabla.com?search_id=my_id --compressed
我写一个PHP SDK这个API,但我不能将这个curl命令到PHP卷曲。
这是我到目前为止已经试过:
curl_setopt($ch1, CURLOPT_URL, $resultsURL);
curl_setopt($ch1, CURLOPT_HTTPHEADER, 'Connection: Keep-Alive');
curl_setopt($ch1, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($ch1, CURLOPT_TIMEOUT, 15); // number of seconds to allow curl to execute
$results = curl_exec($ch1);
echo(json_encode($results));
curl_close($ch1);
我得到一些结果,但它们是不一致的。通常的回应是约9MB的json(来自cli curl),我得到了从1.46KB到900KB的所有内容。所有这一切都发生在同一个API调用...
这段代码有什么问题,或者我该怎么做到这一点?我出这件事的想法
编辑:长期的调试,我发现,bash的卷曲和PHP卷曲(在我的情况的Apache)发送同样的请求,它必须是服务器故障而不致取一切后,回复给我。
我会再次编辑并发布一个答案,当我找到exaclty它是什么。
PHP卷曲manual说,对CURLOPT_ENCODING
中的内容 “的Accept-Encoding:” 标头。这使得解码 的响应。支持的编码是“身份”,“放气”和 “gzip”。如果设置了空字符串“”,则会发送包含所有支持的编码类型的标题。
因此,在那里使用empty来支持任何编码。
curl_setopt($ch1, CURLOPT_ENCODING, '');
我试过了,但似乎没有解决问题。 –
它必须与您正在使用的API有关。我测试了bash和一个php脚本的卷曲,并得到了相同的结果。这是一个使用我使用的PHP代码的pastebin:https://pastebin.com/pX0C4cnu –
你有3个不同的'curl_exec()'调用,它是实际的还是示例代码? – Flying
尝试设置['CURLOPT_RETURNTRANSFER'](https://secure.php.net/manual/en/function.curl-setopt.php) – kerbholz
@Flying不,这是错误的,我在运行代码中有一个exec。 –