我想知道是否有一种简单的方法来执行REST API GET调用?我一直在阅读关于cURL的文章,但这是一个好的方法吗?
我还发现了php://input,但我不知道如何使用它。有人能给我举个例子吗?
我不需要高级API客户端工具,我只需要执行对特定URL的GET调用,以获取将由客户端解析的一些JSON数据。
谢谢!
有多种方法可以进行REST客户端API调用:
CURL是最简单且不错的选择。以下是一个简单的调用示例:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, POST DATA);
$result = curl_exec($ch);
print_r($result);
curl_close($ch);
这是一个“PHP HTTP客户端,使HTTP/1.1的工作变得容易,并消除了使用Web服务的痛苦”。与cURL相比,使用Guzzle要简单得多。
以下是网站上的示例:
$client = new GuzzleHttp\Client();
$res = $client->get('https://api.github.com/user', [
'auth' => ['user', 'pass']
]);
echo $res->getStatusCode(); // 200
echo $res->getHeader('content-type'); // 'application/json; charset=utf8'
echo $res->getBody(); // {"type":"User"...'
var_export($res->json()); // Outputs the JSON decoded data
如果您有一个URL并且您的PHP支持它,您可以直接调用file_get_contents:
$response = file_get_contents('http://example.com/path/to/api/call?param1=5');
$response = json_decode($response);
如果您正在使用Symfony,则有一个很棒的rest客户端bundle,甚至包括所有的约100个异常并抛出它们,而不是返回一些无意义的错误代码和消息。
try {
$restClient = new RestClient();
$response = $restClient->get('http://www.someUrl.com');
$statusCode = $response->getStatusCode();
$content = $response->getContent();
} catch(OperationTimedOutException $e) {
// do something
}
Httpful是一个简单、可链式调用、易读的PHP库,旨在使HTTP通信变得更加合理。它让开发者专注于与API交互,而不是在curl set_opt页面中查找信息,是一个理想的PHP REST客户端。
Httpful包括以下功能...
示例:
发送GET请求。自动获取解析为JSON响应。
该库注意到响应中的JSON Content-Type,并将其自动解析为本机PHP对象。
$uri = "https://www.googleapis.com/freebase/v1/mqlread?query=%7B%22type%22:%22/music/artist%22%2C%22name%22:%22The%20Dead%20Weather%22%2C%22album%22:%5B%5D%7D";
$response = \Httpful\Request::get($uri)->send();
echo 'The Dead Weather has ' . count($response->body->result->album) . " albums.\n";
如果fopen包装器已启用,您可以使用file_get_contents
。请参见:http://php.net/manual/en/function.file-get-contents.php
如果它们没有启用,并且您无法修复它,因为您的主机不允许,则可以使用cURL
方法。
file_get_contents
通常更容易,但只能处理GET
。如果您确定您的服务器可以处理它并且您确定以后不需要POST
,那么这似乎对您的情况已经足够了。 - Nanne