내가 원하는 것은 HTTP (예 : jQuery의 AJAX) 요청이있는 API에서 외부 API로 객체를 얻는 것입니다. 어떻게 시작합니까? Google에 대해 조사했지만 도움이 될만한 내용이 없습니다.
궁금해지기 시작한이조차도 가능합니까? 이 게시물에서 Laravel 4는 컨트롤러에서 외부 URL로 게시 요청을 수행하여 가능한 것처럼 보입니다. 그러나 일부 문서를 찾을 수있는 예나 소스는 없습니다.
도와주세요?
내가 원하는 것은 HTTP (예 : jQuery의 AJAX) 요청이있는 API에서 외부 API로 객체를 얻는 것입니다. 어떻게 시작합니까? Google에 대해 조사했지만 도움이 될만한 내용이 없습니다.
궁금해지기 시작한이조차도 가능합니까? 이 게시물에서 Laravel 4는 컨트롤러에서 외부 URL로 게시 요청을 수행하여 가능한 것처럼 보입니다. 그러나 일부 문서를 찾을 수있는 예나 소스는 없습니다.
도와주세요?
답변:
https://stackoverflow.com/a/22695523/1412268 에서 비슷한 질문에 대한 답변을 기반으로합니다.
$client = new GuzzleHttp\Client();
$res = $client->get('https://api.github.com/user', ['auth' => ['user', 'pass']]);
echo $res->getStatusCode(); // 200
echo $res->getBody(); // { "type": "User", ....
Laravel에서 패키지 Guzzle을 사용할 수 있습니다. HTTP 요청을 보내는 PHP HTTP 클라이언트입니다.
작곡가를 통해 Guzzle을 설치할 수 있습니다
composer require guzzlehttp/guzzle:~6.0
또는 프로젝트의 기존 composer.json에서 Guzzle을 종속성으로 지정할 수 있습니다.
{
"require": {
"guzzlehttp/guzzle": "~6.0"
}
}
아래와 같이 Guzzle을 사용하는 laravel 5의 예제 코드
use GuzzleHttp\Client;
class yourController extends Controller {
public function saveApiData()
{
$client = new Client();
$res = $client->request('POST', 'https://url_to_the_api', [
'form_params' => [
'client_id' => 'test_id',
'secret' => 'test_secret',
]
]);
echo $res->getStatusCode();
// 200
echo $res->getHeader('content-type');
// 'application/json; charset=utf8'
echo $res->getBody();
// {"type":"User"...'
}
// "200"
은 // 200
반환 된 값이 정수이기 때문에 되어야합니다 .
외부 URL을 호출하고 결과를 사용하고 싶습니까? JSON을 제공하는 무언가에 대한 간단한 GET 요청에 대해 이야기하는 경우 PHP는 즉시 이것을 수행합니다.
$json = json_decode(file_get_contents('http://host.com/api/stuff/1'), true);
게시 요청을하고 싶다면 조금 어렵지만 curl을 사용하여이를 수행하는 방법에 대한 예제가 많이 있습니다.
그래서 나는 그 질문이 있다고 생각합니다. 정확히 무엇을 원하세요?
2019 년 3 월 21 일에 업데이트 됨
를 GuzzleHttp
사용하여 패키지 추가composer require guzzlehttp/guzzle:~6.3.3
또는 Guzzle을 프로젝트의 종속성으로 지정할 수 있습니다 composer.json
{
"require": {
"guzzlehttp/guzzle": "~6.3.3"
}
}
API를 호출하는 클래스의 맨 아래에 아래 행을 포함하십시오.
use GuzzleHttp\Client;
요청을 위해 아래 코드를 추가하십시오
$client = new Client();
$res = $client->request('POST', 'http://www.exmple.com/mydetails', [
'form_params' => [
'name' => 'george',
]
]);
if ($res->getStatusCode() == 200) { // 200 OK
$response_data = $res->getBody()->getContents();
}
현재 Laravel v7.X , 프레임 워크는 이제 감싸 최소한의 API와 함께 제공 목구멍 HTTP 클라이언트 . HTTP 클라이언트를 사용하여 get , post , put , patch 및 delete 요청을 쉽게 수행 할 수 있습니다 .
use Illuminate\Support\Facades\Http;
$response = Http::get('http://test.com');
$response = Http::post('http://test.com');
$response = Http::put('http://test.com');
$response = Http::patch('http://test.com');
$response = Http::delete('http://test.com');
Illuminate\Http\Client\Response
리턴 된 인스턴스가 제공 한 메소드 세트를 사용하여 응답을 관리 할 수 있습니다 .
$response->body() : string;
$response->json() : array;
$response->status() : int;
$response->ok() : bool;
$response->successful() : bool;
$response->serverError() : bool;
$response->clientError() : bool;
$response->header($header) : string;
$response->headers() : array;
물론 다음과 같이 Guzzle을 설치해야합니다.
composer require guzzlehttp/guzzle
더 유용한 기능이 내장되어 있으며 다음 기능에 대한 자세한 내용은 https://laravel.com/docs/7.x/http-client에서 확인할 수 있습니다.
이것이 Laravel 내에서 외부 API 호출을 수행하는 가장 쉬운 방법입니다.
확실히, 모든 PHP 프로젝트의 경우 요청을 보내는 데 GuzzleHTTP를 사용할 수 있습니다. Guzzle에는 여기에서 확인할 수있는 매우 유용한 문서가 있습니다 . Laravel의 여러 컨트롤러 및 구성 요소에서 많은 인스턴스를 생성하는 대신 Laravel 프로젝트의 모든 구성 요소 (예 : 특성)에서 Guzzle의 Client 클래스 사용을 중앙 집중화하고 싶을 것입니다. 답장은 제안합니다).
사용할 수있는 특성을 만들었습니다.이를 통해 Laravel 프로젝트의 모든 구성 요소에서 요청을 보내고을 호출 할 수 makeRequest
있습니다.
namespace App\Traits;
use GuzzleHttp\Client;
trait ConsumesExternalServices
{
/**
* Send a request to any service
* @return string
*/
public function makeRequest($method, $requestUrl, $queryParams = [], $formParams = [], $headers = [], $hasFile = false)
{
$client = new Client([
'base_uri' => $this->baseUri,
]);
$bodyType = 'form_params';
if ($hasFile) {
$bodyType = 'multipart';
$multipart = [];
foreach ($formParams as $name => $contents) {
$multipart[] = [
'name' => $name,
'contents' => $contents
];
}
}
$response = $client->request($method, $requestUrl, [
'query' => $queryParams,
$bodyType => $hasFile ? $multipart : $formParams,
'headers' => $headers,
]);
$response = $response->getBody()->getContents();
return $response;
}
}
이 특성은 파일 전송도 처리 할 수 있습니다.
이 특성과이 특성을 Laravel에 통합하기위한 기타 사항에 대한 자세한 내용을 보려면이 기사를 확인 하십시오 . 또한이 주제에 관심이 있거나 주요 지원이 필요한 경우 전체 과정 을 안내하는 내 과정 을 수강 할 수 있습니다 .
여러분 모두에게 도움이 되길 바랍니다.
최고의 소원 :)
Httpful을 사용할 수 있습니다 :
웹 사이트 : http://phphttpclient.com/
Github : https://github.com/nategood/httpful