0

我正在尝试编写一个从 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 中实现这一点的最佳方法是什么?

谢谢!

4

1 回答 1

2

最好的方法是使用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 ParserSimpleXML或任何您想要的。

于 2012-08-14T18:26:37.957 回答