[Laravel] GuzzleHttp 사용하기

[Laravel] GuzzleHttp 사용하기 updated_at: 2024-01-30 17:59

GuzzleHttp

GuzzleHttp 는 외부데이타와 통신을 하는 대표적인 패키지입니다.

인스톨

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());
}
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글