私が欲しいのは外部APIへのHTTP(例えばjQueryのAJAX)リクエストでAPIからオブジェクトを取得することです。どうやって始めますか?私はグーグル氏について調査しましたが、何も手助けを見つけることができません。
私は不思議に思うようになりましたこれも可能ですか?この記事では Laravel 4はデータからコントローラから外部URLへの投稿要求を行っています それは可能なようです。しかし、ドキュメントを見つけるための場所や例はありません。
私を助けてください?
ここで同様の質問の答えに基づいて: https://stackoverflow.com/a/22695523/1412268
ご覧ください Guzzle
$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"...'
}
外部URLを呼び出して結果を使用したいだけですか。 JSONにサービスを提供する単純なGETリクエストについて話しているのであれば、PHPはそのままでこれを行います。
$json = json_decode(file_get_contents('http://Host.com/api/stuff/1'), true);
投稿要求をしたいのであれば、それは少し難しいですが、curlを使ってこれを行う方法の例がたくさんあります。
だから私は問題があると思います。正確に何が欲しいですか?
2019年3月21日に更新
composer require guzzlehttp/guzzle:~6.3.3
を使用してGuzzleHttp
パッケージを追加する
あるいは、あなたのプロジェクトのcomposer.json
の中で依存関係としてGuzzleを指定することもできます。
{
"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();
}
あなたはHttpfulを使用することができます:
ウェブサイト: http://phphttpclient.com/
間違いなく、どのPHPプロジェクトでも、リクエストの送信にGuzzleHTTPを使用できます。 Guzzleには、確認できる非常に素晴らしいドキュメントがあります here 。言いたいのは、おそらくいくつかのコントローラーやコンポーネントでクライアントインスタンスを作成するのではなく、Laravelプロジェクトのコンポーネント(特性など)でGuzzleのクライアントクラスの使用を集中化することです。 of Laravel(多くの記事と返信が示唆するように)。
使用できるトレイトを作成しました。これにより、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に統合するには、この article をチェックしてください。さらに、このトピックに興味がある場合、または主要な支援が必要な場合は、 my course を選択して、プロセス全体をガイドできます。
皆さんのお役に立てばと思います。
ご多幸を祈る :)