2012-08-14 55 views
0

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

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

在提琴手,请求看起来是这样的:

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

的User-Agent:提琴手

授权:123456789-123456789abcdef

主持人:服务.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来实现这一目标的最佳方式是什么?

谢谢!

回答

2

最好的方法是使用cURL,因为你希望能够传递标题。 file_get_contents不会允许。确保你看看curl_setopt function所有你可以用cURL做的事情。我想你会想要选项CURLOPT_HTTPHEADER。它以array('Content-type: text/plain', 'Content-length: 100')的格式接收一组HTTP头字段进行设置。

CURLOPT_USERAGENT将允许您传递用户代理字符串,如果您选择像Fiddler一样执行操作(将其命名为Fiddler以外的其他名称)。

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

+0

这确实看起来像我想要的。谢谢!但是,我对PHP很陌生,并不十分理解数组格式的含义。它是说这个关键字需要是'text/plain',并且该值不能超过100,或者这是一个非键控数组,每个值都需要是'text/plain /并且小于100? – rwhite 2012-08-14 19:12:43

+0

这只是一个例子。你想发送的每个头都需要是它自己的数组元素,比如'array('Authorization:123456789-123456789abcdef')'。如果您想将其添加到该数组中,则可以添加其他内容。 – tubaguy50035 2012-08-14 19:43:29