获取远程 XML 文件返回奇怪的字符串
我有一个奇怪的问题。 当我在浏览器中访问该 url 时,我会得到一个格式良好的 XML 结构作为回报。
<root>
<contents/>
</root>
(虽然是假数据)
但是当我使用 cURL、file_get_contents(甚至 Linux 中的 wget)时,我得到了某种对我来说无法使用的序列化数据。``
{"root:{"contents 等。
任何人都知道为什么以及如何修复它?
I've got an weird problem.
When i go to the url in the browser, i get a nicely formatted XML structure in return.
<root>
<contents/>
</root>
(fake data though)
But when i use cURL, file_get_contents (or even wget in Linux) i get some sort of serialized data wich is unusable for me.``
{"root:{"contents etc.
Anyone knows why and how to fix it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是 JSON。
使用
json_decode
函数来解析它。It's JSON.
Use
json_decode
function to parse it.服务器可能正在检测用户代理并相应地格式化结果。在 wget 中,添加 '--user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:5.0) Gecko/20110619 Firefox/5.0' 选项,使服务器认为您来自浏览器。另一种方法是通过 Accept 标头告诉服务器您期望的内容类型。
The server is probably detecting the user agent and formatting results accordingly. In wget, add ‘--user-agent=Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:5.0) Gecko/20110619 Firefox/5.0’ option to make the server think you are coming from a browser. An alternative is to tell the server what content type you are expecting with the Accept Header.
这可能是内容协商的问题。
您的浏览器通常会发送一个请求 text/html 或类似内容的 Accept 标头。不过,服务器的默认设置似乎是提供 json 服务。确保在 cURL 请求中发送适当的 Accept 标头,以告诉服务器应如何响应您的请求。
顺便说一句,如果您要稍后处理 XML,则可能根本不需要 cURL。所有基于 libxml 的 XML 扩展都可以从远程位置加载。他们可以使用自定义 HTTP 流上下文。
参考:
This is likely an issue of Content Negotiation.
Your browser usually sends an Accept Header that requests text/html or something like that. The default of the server seems to be to serve json though. Make sure you send the appropriate Accept Header in the cURL request to tell the server how it should response to your request.
On a sidenote, if you are going to process the XML afterwards, you likely dont need cURL at all. All of the libxml based XML extensions can load from remote locations. And they can do so with a custom HTTP stream context.
Reference: