facebook 似乎正在使用浏览器检测来格式化服务器上的 JSON。
对于 wget,不应用格式:
> wget -q -S -O - http://graph.facebook.com/4
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: private, no-cache, no-store, must-revalidate
Content-Type: text/javascript; charset=UTF-8
ETag: "539feb8aee5c3d20a2ebacd02db380b27243b255"
Expires: Sat, 01 Jan 2000 00:00:00 GMT
P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
Pragma: no-cache
X-FB-Rev: 526949
Set-Cookie: datr=imJrT4lrhBZ48Mrtw4uYfByk; expires=Sat, 22-Mar-2014 17:34:02 GMT; path=/; domain=.facebook.com; httponly
X-FB-Debug: +gpBLnliDoRvuNtlHIwHASwsDz4pJm9TP3btrrw6AsE=
X-Cnection: close
Date: Thu, 22 Mar 2012 17:34:02 GMT
Content-Length: 172
{"id":"4","name":"Mark Zuckerberg","first_name":"Mark","last_name":"Zuckerberg","link":"http:\/\/www.facebook.com\/zuck","username":"zuck","gender":"male","locale":"en_US"}
但对于 google chrome,wireshark 显示的文本格式为空格和换行符:
{
"id": "4",
"name": "Mark Zuckerberg",
"first_name": "Mark",
"last_name": "Zuckerberg",
"link": "http://www.facebook.com/zuck",
"username": "zuck",
"gender": "male",
"locale": "en_US"
}
(它确实是不同的数据——在这种情况下,Content-Length 是 210)。请注意,Content-Type 仍然是 text/javascript - 它们不会呈现为 HTML。
所以你需要为你使用的任何语言使用 JSON 格式化程序(我猜你已经在使用一个库,所以检查它是否有“prettyprint”选项或类似选项)。另外,如果您想在格式化似乎不重要时节省带宽,可以从请求标头检测浏览器(和一般上下文 - 请参阅 Paul 的评论)。