繁体   English   中英

PHP - 检测gzip服务器响应

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM