[英]PHP - Detect gzip server response
我正在使用curl来获取网页,我需要检测响应是否是gzip。
如果在响应头中指定了Content-Encoding,则此工作完全正常,但某些服务器返回“Transfer-Encoding”:“Chunked”且没有Content-Encoding标头。
有没有办法检测gzip或获取原始(编码)服务器响应?
我试着查看curl_getinfo但是也没有指定content_encoding。
谢谢。
您可以检查响应是否以gzip幻数开始,特别是1f 8b
。
您可以发出单独的HEAD请求:
CURLOPT_HEADER => true
CURLOPT_NOBODY => true
或者请求标头作为原始请求的前缀:
CURLOPT_HEADER => true
但是,如果您只想获取(已解码的)HTML,则可以使用:
CURLOPT_ENCODING => ''
CURL将自动与服务器协商并为您解码。
有没有办法检测gzip
是。 您可以使用cURLs标头功能。 例如,您可以定义一个处理标题响应的函数。 将curl_setopt()
与CURLOPT_HEADERFUNCTION
选项一起使用。 或者使用CURLOPT_WRITEHEADER
选项将其写入文件(使用fopen()
创建的文件)。
您可以使用更多选项。 在curl_setopt()手册中查看可能性。 您要查找的标题名称为: Content-Encoding 。
如果你有一个文件中的输出,你也可以使用PHPs finfo及其一些预定义的常量 。 或者mime_content_type() ( DEPRECATED! )如果你没有finfo。
[...]或获取原始(编码)服务器响应?
是。 您可以指定accept-encoding标头。 您要寻找的价值是身份 。 所以你可以发送:
Accept-Encoding: identity
可以查看HTTP / 1.1 RFC获取未编码/未压缩的输出(例如直接将其写入文件)。 为此目的使用CURLOPT_ENCODING
。 您也可以使用* curl_setopt *进行设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.