====== 35 Laravel Curlの代わりにGuzzleを使う ====== Crulより簡単で、シンプルに書ける guzzlehttp/guzzle 6.3.3 ===== インストール ===== composer require guzzlehttp/guzzle ==== 1.シンプル利用 ==== use GuzzleHttp\Client; $url = 'https://hoge.hogehoge.com'; $ip = '192.168.10.11'; $port = '25'; $client = new Client(); $response = $client->request( 'POST', $url, [ 'form_params' => [ 'ip' => $ip, 'port'=> $port], 'verify' => false ] ); echo $response->getStatusCode(); // 200 echo $response->getReasonPhrase(); // OK echo $response->getProtocolVersion(); // 1.1 // レスポンスボディを取得 $responseBody = $response->getBody()->getContents(); ==== 2.JSON-RPC 2.0 ==== 下記はZabbix apiでアラートを取得する例 use GuzzleHttp\Client; $url = "http://hogehoge.net/zabbix/api_jsonrpc.php"; $auth = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; $params = [ "id"=> 1, "auth"=> $auth, "jsonrpc" => "2.0", "method"=> "alert.get", "params"=> [ "output"=> "extend", "sortfield"=> "alertid", "sortorder"=> "DESC", "limit"=> 3 ], ]; $client = new Client(); try{ $response = $client->request( 'POST', $url, $params ); } catch (\GuzzleHttp\Exception\ConnectException $e) { return json_encode($e->gethandlerContext()); } echo $response->getStatusCode(); // 200 echo $response->getReasonPhrase(); // OK echo $response->getProtocolVersion(); // 1.1 $responseBody = $response->getBody()->getContents(); return $responseBody; ==== 3.XML_RPC ==== === Controller === url = $url; $this->user = $user; $this->password = $password; } public function send($method, $params = []) { $auth = ['login' => $this->user, 'password' => $this->password]; $params = [$auth, $params]; $body = xmlrpc_encode_request($method, $params); //print_r($body); $response = (new Client)->post($this->url, [ 'body' => $body, 'auth' => [$this->user, $this->password] ]); return $response->getBody()->getContents(); } } === 呼び出し部分 === $XmlRcp = new App\Http\Controllers\XmlRpc($url, $user, $pass); $XmlRcp->send('partner10.getKeyInfo', 'PLSK.XXXXXXXX.XXXX') ===== 50X, 40X 対応 ===== 'http_errors' => false にすると、50X,40Xでも例外を投げられない(処理が止まらない) $response = $client->request( 'GET', $url, [ 'timeout' => 2, 'verify' => false, 'http_errors' => false, ] ); ===== Error Handle ===== timeoutなどのexceptionは下記のように処理する。 「catch (\GuzzleHttp\Exception\ConnectException $e)」でエラーを取得すると、タイムアウト時に終了せずエラーを受け取れる try{ // Code $response = $client->request( $method, $url, $params ); } catch(\GuzzleHttp\Exception\GuzzleException $e) { // Handle excpetion return json_encode($e->gethandlerContext()); } {{tag>Laravel}}