我是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);
这看起来是对的吗?
答案 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助手,所以它可能正是您正在寻找的。 p>