获取远程 XML 文件返回奇怪的字符串

发布于 2024-11-18 04:06:25 字数 286 浏览 0 评论 0原文

我有一个奇怪的问题。 当我在浏览器中访问该 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

荆棘i 2024-11-25 04:06:25

这是 JSON。
使用 json_decode 函数来解析它。

It's JSON.
Use json_decode function to parse it.

眼泪淡了忧伤 2024-11-25 04:06:25

服务器可能正在检测用户代理并相应地格式化结果。在 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.

又怨 2024-11-25 04:06:25

这可能是内容协商的问题。

总结一下这是如何工作的,当用户代理向服务器提交请求时,用户代理会通知服务器它理解哪些媒体类型,并对其理解程度进行评级。更准确地说,用户代理提供了一个 Accept HTTP 标头,其中列出了可接受的媒体类型和相关的质量因素。然后,服务器能够提供最适合用户代理需求的资源版本。

您的浏览器通常会发送一个请求 text/html 或类似内容的 Accept 标头。不过,服务器的默认设置似乎是提供 json 服务。确保在 cURL 请求中发送适当的 Accept 标头,以告诉服务器应如何响应您的请求。

顺便说一句,如果您要稍后处理 XML,则可能根本不需要 cURL。所有基于 libxml 的 XML 扩展都可以从远程位置加载。他们可以使用自定义 HTTP 流上下文。

参考:

This is likely an issue of Content Negotiation.

To summarize how this works, when a user agent submits a request to a server, the user agent informs the server what media types it understands with ratings of how well it understands them. More precisely, the user agent provides an Accept HTTP header that lists acceptable media types and associated quality factors. The server is then able to supply the version of the resource that best fits the user agent's needs.

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:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文