При использовании curl я вижу разницу в поведении на сервере, на который я --compressed
в зависимости от того, прошел ли я – --compressed
как аргумент или нет.
Я уже устанавливаю заголовок Accept-Encoding для gzip, deflate, sdch:
curl_setopt( $ch, CURLOPT_ENCODING, 'gzip,deflate,sdch' );
Я также попытался установить кодировку в пустую строку: '', поскольку это предположительно означает, что поддерживается сжатие любого типа.
Однако, если я передал – --compressed
через командную строку, тип содержимого, который я возвращаю, это: gzip
. Если я не --compressed
, тип содержимого, который я возвращаю, это text/html;charset=UTF-8
Используя curl_exec()
PHP, я никогда не могу заставить его вернуть тип содержимого: gzip.
=====
Позвольте мне уточнить, что я пытаюсь выполнить. Когда я запускаю следующую команду: curl -I http://someserver.com --compressed
получает меня content-type: gzip
Запуск той же команды curl -I http://someserver.com
без --compressed
получает меня content-type: text/html;charset=UTF-8
Попытка сделать это в PHP:
$ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, "http://someserver.com" ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); // I've tried excluding this line, setting it to gzip, and empty string curl_setopt( $ch, CURLOPT_ENCODING, '' ); curl_setopt( $ch, CURLOPT_HEADER, 1); curl_exec( $ch ) ); $content_type = curl_getinfo( $ch, CURLINFO_CONTENT_TYPE );
Независимо от того, что я пытаюсь, я получаю $ content-type = text/html;charset=UTF-8
а не gzip
Не все службы во всем мире предоставляют сжатый контент в качестве ответа. С помощью опции CURLOPT_ENCODING
вы можете запрашивать только сжатый контент с сервера. Но сервер вернет вам простой html, если он не реализовал механизм. Вы можете попробовать с другими случайными веб-сайтами, которые предоставляют содержимое сжатия. Например, youtube.com (возможно).
Удаление параметра CURLOPT_ENCODING
(так что завиток не выполняется автоматически декодирование), и включение опции accept-encoding
в заголовок вручную должно сделать трюк:
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Encoding: gzip, deflate', 'Connection: Close' ));