[Laravel] GuzzleHttp 사용하기
GuzzleHttp
GuzzleHttp 는 외부데이타와 통신을 하는 대표적인 패키지입니다.
- 참조 : guzzlephp
인스톨
composer require guzzlehttp/guzzle:^7.0
사용예
Request 시 사용되는 옵션
- query : 주로 get방식에서 사용하며 k=key&v=value 식으로 전송된다. (GET)
- body : 일반적인 post방식에서 사용(POST, PUT, PATCH)
- multipart : 주로 파일을 전송할 때 사용(multipart/form-data), 아래 form_params 와 함께 사용할 수는 없다. (POST, PUT)
- json : 데이타를 json 형식으로 변경하여 전송 (application/json) (POST, PUT)
- form_params : (application/x-www-form-urlencoded) POST 시 사용
- headers : header로 특정값을 보낸때.
기타 자세한 내용은 Request Options 를 참조 바랍니다.
Get
GET 방식일 경우 'query' 변수에 담아 보낸다.
use GuzzleHttp\Client;
.......................
$client = new \GuzzleHttp\Client();
$endpoint = 'http://sample-url-and-file-path';
$query = [
'param'=> 'sample',
.....
];
$response = $client->request('GET', $endpoint, ['query' => $query]); // GET 을 사용할 경우 'query' 변수에 담아 보낸다.
$res = json_decode($response->getBody(), true); // for json
아래처럼 다차원의 값도 전송가능하다.
$query=> [
'field_name' => 'abc',
'other_field' => '123',
'nested_field' => [
'nested' => 'hello'
]
];
$client = new \GuzzleHttp\Client(['base_uri' => '']);
$response = $client->get('/url', ['query'=>[], 'headers' => []]);
$response->getBody()->getContents()
POST
POST 방식일경우 form_params 에 전송값을 담아 보낸다.
$client = new \GuzzleHttp\Client();
$endpoint = 'http://sample-url-and-file-path';
$form_params= [
'id'=> $id,
....
];
Log::debug($query);
$response = $client->request('POST', $endpoint, ['form_params' => $form_params]); // POST 방식일경우 form_params 에 전송값을 담아 보낸다.
$res = json_decode($response->getBody(), true); // for json if error occur DB rollback
Request 시 사용되는 옵션 예제
header
$response = $client->request('GET', $endpoint, ['headers' => ['Authorization' => 'Bearer '.$access_token]]);
$response = $client->request('POST', $endpoint, ['headers' => $headers]);
form_params
$response = $client->request('POST', $endpoint, ['form_params' => $form_params, 'allow_redirects' => [
'max' => 10, // allow at most 10 redirects.
'strict' => true, // use ""strict"" RFC compliant redirects.
'referer' => true, // add a Referer header
// 'protocols' => ['https'], // only allow https URLs
// 'on_redirect' => $onRedirect,
'track_redirects' => true
]]);"
서버설정에 따라 REQUEST_METHOD="GET"으로 변경되는 데 이때를 대비해서 'strict' => true
우리가 요청을 던져서 결과를 받을 경우는 false(default) 가 좋으나 우리가 특정 method로 내보낼 경우 는 true로 설정하여야 한다.
JSON 타입으로 전송
$query = [
'id'=> $id,
.....
];
$headers = [
'Content-Type' => 'application/json; charset=utf-8'
];
$response = $client->request('POST', $endpoint, ['json' => $query, 'headers' => $headers]);
응답받기
$response->getStatusCode(); // status Code
$response->getBody(); // html
$response->getBody()->getContents();
json_decode($response->getBody(), true); // response가 json일 경우
if ($response->getStatusCode() == '200') {
} else {
Log::info($response->getBody()->getContents());
}