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
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);
header('Content-Type: text/xml');
я отредактировал свой ответ