使用 PHP 从 Web 服务检索 xml


Retrieve xml from web service using PHP

我正在尝试编写一个从Web服务检索xml文件的PHP脚本。我已经在C#中获得了等效的工作,但我的总体目标是将我的最终脚本集成到Wordpress中。

诀窍是我需要添加一个身份验证标头令牌。

在 Fiddler 中,请求如下所示:

获取 https://service.domain.com/sample/stuff/555/state/PA/page/1/size/10 HTTP/1.1

用户代理:提琴手

授权:123456789-123456789abcdef

主持人:service.mywebgrocer.com

我拥有(工作)的 C# 代码如下所示:

HttpWebRequest request =
    (HttpWebRequest)
    WebRequest.Create("https://service.domain.com/sample/stuff/555/state/PA/page/1/size/10");
  request.Method = "GET";
  request.Headers.Add("Authorization", "123456789-123456789abcdef");
  request.ContentType = "application/xml; charset=utf-8";
  HttpWebResponse httpWebResponse = (HttpWebResponse) request.GetResponse();

  Stream stream = httpWebResponse.GetResponseStream();
  StreamReader streamRead = new StreamReader(stream);
  String streamString = streamRead.ReadToEnd();
  XmlDocument doc = new XmlDocument();
  doc.LoadXml(streamString);
  Console.WriteLine("Name of xml document: {0}", doc.Name);
  Console.WriteLine("outer xml: {0}'n", doc.OuterXml);

在 PHP 中实现这一点的最佳方法是什么?

谢谢!

最好的方法是使用 cURL,因为您希望能够传递标头。 file_get_contents不会允许的。 确保你查看了curl_setopt函数,了解你可以用cURL做的所有事情。

我想你会想要选项 CURLOPT_HTTPHEADER . 它需要设置一个 HTTP 标头字段数组,格式为 array('Content-type: text/plain', 'Content-length: 100') .

CURLOPT_USERAGENT将允许您传递用户代理字符串,如果您选择像 Fiddler 那样这样做(将其命名为 Fiddler 以外的名称)。

当您运行curl_exec时,它应该从站点返回 XML。 从那里你可以使用XML解析器,SimpleXML或任何你想要的东西。