使用PHP进行奇怪的REST API响应

时间:2014-03-20 06:26:19

标签: php json rest

当我通过在网址框中输入任何方法请求任何方法时,我正在访问我的客户端的一个API。以下是Chrome浏览器中的请求/响应快照。

Request URL:http://example.com/RestAPI/api/holding_info.action?deviceId=1&holdingId=23
Request Method:GET
Status Code:200 OK

Request Headers
---------------
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:risto.enon.biz
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36
Query String Parametersview sourceview URL encoded
deviceId:1
holdingId:23

Response Headers
----------------
Connection:Keep-Alive
Content-disposition:filename="response.json"
Content-Type:application/json
Date:Thu, 20 Mar 2014 06:13:52 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.2.22 (Ubuntu)
Transfer-Encoding:chunked

在IE上然而,同样的请求提供了一个文件下载,我认为这是一个奇怪的行为。问题是如何在PHP中使用这样的API。在PHP中我使用的方法,即curl,file_get_contents()和使用外部库,如Guzzle,httpful等,我得到的响应真的很奇怪。看附图。 enter image description here

在图片中,您可以看到我已经对已响应的文本进行了var_dump()编辑,并且每个有效字符之间都包含一些奇怪的字符。由于这些奇怪的字符,我无法将其解析为json。

为什么这个API如此不同?我在某处读到某些API要求客户端保持会话打开以获取数据流,但我并不知道如何处理它。还有为什么Chrome会正确的呢?我强烈猜测问题是由于响应标头中的Transfer-Encoding:chunked引起的。请帮我在PHP中使用这样的API。

1 个答案:

答案 0 :(得分:1)

这看起来像是用BOM以UTF-16编码。

试试这个

$out = mb_convert_encoding(file_get_contents('data.txt'), 'UTF-8', 'UTF-16');