У меня есть этот код, чтобы получить и XML из GZIP.
Я обновлю весь код.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, XML_POST_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_POST, True);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($ch, CURLOPT_POSTFIELDS, XML_PAYLOAD);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml','Connection: close'));
$result = curl_exec($ch);
if ( curl_errno($ch) ) {
$result = 'cURL ERROR -> ' . curl_errno($ch) . ': ' . curl_error($ch);
log_cron('ERRO', $result, $mid, 'ACESSO AO WEBSERVICE');
} else {
$returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
switch($returnCode) {
case 200:
break;
default:
$result = 'HTTP ERROR -> ' . $returnCode;
log_cron('ERRO', $result, $mid, 'ACESSO AO WEBSERVICE');
break;
}
}
curl_close($ch);
$arquivo = getZip($result);
try {
$xml = new SimpleXMLElement($arquivo);
}catch (Exception $e) {
echo "Bad xml: ".$e->getMessage();
}
function getZip($stream) {
$fp = fopen("arquivo.gz", "w");
fwrite($fp, $stream, 2048);
fclose($fp);
sleep(2);
$zp = gzopen("arquivo.gz", "r");
$contents = gzread($zp, 10000);
gzclose($zp);
return $contents;
}
Но даже когда я извлекаю или пытаюсь прочитать от байта к байту, ответ всегда одинаков.
Кто-нибудь может мне помочь?
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
должно быть
curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');
Других решений пока нет …