невозможно декодировать gzip с помощью curl Stack Overflow

Я пытался несколькими способами, прежде чем подумать, чтобы задать этот вопрос здесь .. ни один способ не удалось со мной … Я пытаюсь декодировать и читать данные с одного сайта, который использует gzip
Я использую локон & PHP. Когда я пытаюсь декодировать и распечатать результат, я получаю длинный список искаженных специальных символов, таких как:

 JHWkdsU01EUXdWa1pXYTFOdFZsZFRiaz
VoVW14S2NGbFljRmRXYkdSWVpFZEdWRT
FYVWtoWmEyaExXVlpLTm1KR1VsWmlXR2

если я запускаю нижеприведенный скрипт PHP, я получаю сообщение об ошибке, как

 PHP Warning:  gzdecode(): data error in /var/www/mn.php on line 20

Вот мой текущий код:

<?
$data_string = '9999';
$ch = curl_init('http://example.com/getN.php&keyword=');
curl_setopt( $ch, CURLOPT_USERAGENT, 'Darwin/15.0.0' );
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch,CURLOPT_ENCODING , 'gzip');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT,5);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow redirects
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded',
'Accept-Encoding: gzip, deflate',
'Content-Length: ' . strlen($data_string))
);


$result = gzdecode ( curl_exec($ch) );

curl_close($ch);
print_r($result);


?>

Я также пытаюсь включить модуль

  a2enmod deflate
/etc/init.d/apache2 restart

и включите zlib из php.ini

либо я пытаюсь проверить это напрямую

curl -sH 'Accept-encoding: gzip' http://example.com/getN.php&keyword=9999 | gunzip -

я получил тот же результат
а вот информация с сайта

HTTP/1.1 200 OK
Server: nginx
Date: Thu, 15 Oct 2015 00:41:54 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.31
X-Frame-Options: SAMEORIGIN
Content-Encoding: gzip

пожалуйста помоги

1

Решение

Я заметил, что ваш код

curl_setopt($ch,CURLOPT_ENCODING , 'gzip');

и gzdecode() позвони позже. Если вы получили указание принять закодированное содержимое, cURL автоматически выполнит декодирование для вас, без необходимости делать это вручную после curl_exec(), Его возвращаемое значение уже декодируется, если вы сказали cURL принять закодированную передачу.

Тем не менее, страница, которую вы пытаетесь загрузить, может быть не закодирована с помощью gzip, а другим способом. Как указано в руководство, попробуйте указать пустую строку:

# Enable all supported encoding types.
curl_setopt($ch, CURLOPT_ENCODING, '');

Это включает все поддерживаемые типы кодирования. И не используйте gzdecode(), Результат должен быть уже декодирован.

2

Другие решения

спасибо всем, наконец, начните работать после того, как я воспользуюсь вашим советом, удалите gzdecode и некоторые другие и сохраните заголовок в … Примите кодировку в gzip и вот окончательный код

<?
$data_string = '9999';
$ch = curl_init('http://example.com/getN.php&keyword=');
curl_setopt( $ch, CURLOPT_USERAGENT, 'Darwin/15.0.0' );
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT,5);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow redirects
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded',
'Accept-Encoding: gzip',
'Content-Length: ' . strlen($data_string))
);


$result = curl_exec($ch);

curl_close($ch);
print $result;


?>
0

По вопросам рекламы [email protected]