Невозможно распаковать данные, возвращаемые API-интерфейсом file_get_contents

0

URL, с которого я пытался получить данные, имеет следующую информацию:

Remote Address:120.138.69.80:80
Request URL:http://mp3.zing.vn/xml/album-xml/ZGJHTlNFQzFNtLFJTDHZG
Request Method:GET
Status Code:200 OK (from cache)
Request Headers
Provisional headers are shown
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp;q=0.8
User-Agent:Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)     Chrome/39.0.2171.71 Safari/537.36
Response Headers
Cache-Control:maxage=1800
Content-Encoding:gzip
Content-Type:text/xml;charset=utf-8
Date:Sun, 07 Dec 2014 09:43:13 GMT
Expires:Sun, 07 Dec 2014 10:13:13 GMT
Pragma:public
Via:1.1 VNG-Cache-123:84 (Lusca)
X-Cache:MISS from VNG-Cache-123

Поэтому я сделал это:

    $url = 'http://mp3.zing.vn/xml/album-xml/ZGJHTlNFQzFNtLFJTDHZG';
    $options = array('http' => array('user_agent' => 'Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'));
    $context = stream_context_create($options);
    $contents = file_get_contents($url, false, $context);
    echo $contents;

В результате появилось много странных персонажей:

����ogvƯ���.��/'7p\����w�d�b�   M����dD��b/    �X4A�E�@>.�I7h���P�����'��w$��M2LSb.lQ�D����x��<��d�Y����?  ���������kI0����|�g���'w'˳�"8�߻�ӷ��[۲~��{w���O DZ�X��:��|

Я предполагаю, что возвращенные данные были gzipped. Поэтому я попытался использовать gzdecode API следующим образом:

    echo gzdecode($contents);

И я получил:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Очень ценим, может ли кто-нибудь из PHP-экспертов помочь мне в этом.

RC2

Теги:

1 ответ

1
Лучший ответ

Content-Encoding - это gzip, который использует заголовок Accept-Encoding: identity чтобы получить контент и использовать header('Content-Type: text/xml') для эхо-данных, поскольку контент, получаемый вами, является XML

<?php

$ch = curl_init('http://mp3.zing.vn/xml/album-xml/ZGJHTlNFQzFNtLFJTDHZG');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//  use a header of Accept-Encoding: identity
curl_setopt($ch, CURLOPT_ENCODING, 'identity');
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');

header('Content-Type: text/xml');
echo $data = curl_exec($ch);
  • 0
    CodingInsane, спасибо, однако, я все еще получаю все нули после отображения $ data.
  • 0
    если вы хотите повторить его, просто используйте header('Content-Type: text/xml'); я отредактировал свой ответ
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню