PHP发布到REST Web服务

时间:2011-06-13 23:50:57

标签: php xml http rest post

我是REST网络服务的新手。我需要使用php将一些信息发布到REST Web服务,并使用响应为用户提供产品(响应是产品的代码)。我的任务:   1)HTTP方法是post   2)请求正文是XML   3)标题需要有一个API密钥ex:some-co-APIkey:4325hlkjh   4)响应是xml,需要进行解析。 我的主要问题是如何设置标题以使其包含密钥,如何设置正文以及如何获取响应。我不确定从哪里开始。我敢肯定这很简单但是因为我从未见过它,所以我不知道如何处理这个问题。如果有人能告诉我一个很棒的例子。提前感谢您提供的任何帮助。

我在想这样的事情;

  $url = 'webservice.somesite.com';

  $xml = '<?xml version="1.0" encoding="UTF-8"?>
      <codes sku="5555-55" />';
  $apiKey = '12345';
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);

  ## For xml, change the content-type.
  curl_setopt ($ch, CURLOPT_HTTPHEADER, $apiKey);

  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ask for results to be returned
  if(CurlHelper::checkHttpsURL($url)) { 
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    }

  // Send to remote and return data to caller.
  $result = curl_exec($ch);
  curl_close($ch);

这看起来是对的吗?

3 个答案:

答案 0 :(得分:8)

您应该使用cURL。你应该阅读文档,但这是我写的一个函数,可以帮助你。根据您的目的修改它

function curl_request($url,  $postdata = false) //single custom cURL request.
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, TRUE); 
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     

    curl_setopt($ch, CURLOPT_URL, $url);

    if ($postdata)
    {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);   
    }

    $response = curl_exec($ch);

    curl_close($ch);

    return $response;
}

对于XML,php有一些很好的解析它的功能。查看simplexml

答案 1 :(得分:1)

如果您可以安装/访问cURL,它将按您的要求执行:

cURL手册: http://php.net/manual/en/book.curl.php

实施例: http://php.net/manual/en/curl.examples.php

一个XML解析器: http://php.net/manual/en/book.xml.php

答案 2 :(得分:0)

只需查看PHP手册如何执行HTTP request并阅读回复。 HTTP context options and parameters对您希望实现的目标非常有用。

如果您需要有关如何发出HTTP POST请求的一般教程,请在此处找到更长的一个:HTTP POST from PHP, without cURL。它还有一个通用REST助手,所以它可能正是您正在寻找的。