Guzzle のドキュメントが分かりにくかったのでサンプルを残そうと思う。
Guzzle のインストールは省略。
サンプルコード
- GET, POST, PATCH, DELETE を使った簡単なサンプル。
- パラメータの受け渡し確認済み。
- ヘッダーの追加、変更、Auth など色々追加したい場合はドキュメント へ
Http.php
use \GuzzleHttp\Client;
class Http
{
private $client = null;
private $url = '';
public function __construct($url = '')
{
$this->client = new Client(['verify' => false]);
$this->url = $url;
}
/**
* GET でリクエストを投げる
*
* @param $url: string
* @param $param: array('key' => 'value')
* @return api result | Client()
*/
public function get($url, $param = [], $decode = true)
{
$param = (is_array($param)) ? $param : [];
$res = $this->client->request('GET', $this->url . $url, ['query' => $param]);
return ($decode) ? $this->decode($res) : $res;
}
/**
* POST でリクエストを投げる
*
* @param $url: string
* @param $param: array('key' => 'value')
* @return api result | Client()
*/
public function post($url, $param = [], $decode = true)
{
$param = (is_array($param)) ? $param : [];
$res = $this->client->request('POST', $this->url . $url, ['form_params' => $param]);
return ($decode) ? $this->decode($res) : $res;
}
/**
* PATCH でリクエストを投げる
*
* @param $url: string
* @param $param: array('key' => 'value')
* @return api result | Client()
*/
public function patch($url, $param = [], $decode = true)
{
$param = (is_array($param)) ? $param : [];
$res = $this->client->request('PATCH', $this->url . $url, ['form_params' => $param]);
return ($decode) ? $this->decode($res) : $res;
}
/**
* DELETE でリクエストを投げる
*
* @param $url: string
* @param $param: array('key' => 'value')
* @return api result | Client()
*/
public function delete($url, $param = [], $decode = true)
{
$param = (is_array($param)) ? $param : [];
$multiparts = [];
foreach ($param as $key => $value) {
$multiparts[] = [
'name' => $key,
'contents' => $value,
];
}
if (count($multiparts) == 0) {
$multiparts[] = [
'name' => '',
'contents' => '',
];
}
$res = $this->client->request('DELETE', $this->url . $url, ['multipart' => $multiparts]);
return ($decode) ? $this->decode($res) : $res;
}
public function decode($client)
{
if (empty($client)) {
return null;
}
$body = $client->getBody();
return (!empty($body)) ? json_decode($body) : null;
}
}
使い方
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\ServerException;
$http = new Http('http://api.sample.com');
try {
// $http->get(...) を $http->post(...), $http->patch(...), $http->delete(...)
// などに変更するだけで使用できる。
$body = $http->get('/users', ['q' => 'smith']);
var_dump($body);
} catch (ClientException $e) {
// クライアントエラー
// ステータスコード
if ($e->hasResponse()) {
$statusCode = $e->getResponse()->getStatusCode();
var_dump($statusCode);
}
// エラーのレスポンス
if ($e->hasResponse()) {
// echo $e->getResponse()->getBody();
if (json_decode($e->getResponse()->getBody())) {
$body = json_decode($e->getResponse()->getBody());
var_dump($body);
}
}
} catch (ServerException $e) {
// ザーバーエラー
// ステータスコード
if ($e->hasResponse()) {
$statusCode = $e->getResponse()->getStatusCode();
var_dump($statusCode);
}
// エラーのレスポンス
if ($e->hasResponse()) {
// echo $e->getResponse()->getBody();
if (json_decode($e->getResponse()->getBody())) {
$body = json_decode($e->getResponse()->getBody());
var_dump($body);
}
}
}