PHP中curl函数如何实现curl --raw的等效功能?
如何用PHP cURL实现
curl --raw的等效行为? curl手册中
--raw(HTTP)选项的作用:启用后,将禁用所有内部HTTP内容或传输编码解码,直接传递未经修改的原始数据。能否使用PHP的cURL函数/setopt实现相同行为?
已尝试
CURLOPT_HTTP_CONTENT_DECODING,但它仍会解析分块响应(Transfer-encoding: chunked),因此该选项并不足够。注:此问题讨论的是响应编码,而非请求编码——这正是
--raw的作用所在。
要在PHP cURL中实现curl --raw的完全等效行为,仅设置CURLOPT_HTTP_CONTENT_DECODING是不够的,因为它只处理gzip、deflate这类内容编码的解码,不会影响分块编码这类传输编码的解析。
正确的做法是同时禁用两种编码的自动解码:
CURLOPT_HTTP_CONTENT_DECODING => false:关闭HTTP内容编码的自动解码CURLOPT_HTTP_TRANSFER_DECODING => false:关闭HTTP传输编码的自动解码(包括分块编码的解析)
示例代码:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://example.com"); // 禁用内容编码解码 curl_setopt($ch, CURLOPT_HTTP_CONTENT_DECODING, false); // 禁用传输编码解码(含分块解析) curl_setopt($ch, CURLOPT_HTTP_TRANSFER_DECODING, false); // 直接返回原始响应数据 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $rawResponse = curl_exec($ch); curl_close($ch); // $rawResponse即为服务器发送的未经任何修改的原始字节流
配置完成后,PHP cURL会完全复刻curl --raw的行为,直接返回原始响应数据,不会对任何编码格式做解析处理。
内容的提问来源于stack exchange,提问作者Stephen Cantini
相关产品推荐
相关产品推荐

