Выполнение HTTP-запросов ОТ Laravel к внешнему API

94

Я хочу получить объект из API с запросом HTTP (например, jQuery AJAX) на внешний api. Как начать? Я исследовал г-на Google, но я не могу найти ничего полезного.

Мне кажется, что это возможно? В этом сообщении Laravel 4 делает запрос от контроллера к внешнему URL с данными, похоже, что это можно сделать. Но нет ни одного примера, ни источника, где можно найти какую-либо документацию.

Пожалуйста, помогите мне?

  • 8
    Спустя долгое время создали действительно маленький рассказ о том, как использовать Guzzle. Из айснока его ответ. chilion.nl/laravel-post-requests-with-guzzle
  • 0
    Если вы все еще заинтересованы, вы также можете использовать Curl для этого, я думаю, вы могли бы сказать, что curl - это jquery ajax для PHP в некоторой форме.
Теги:
http
request

6 ответов

124
Лучший ответ

Основываясь на ответе на подобный вопрос здесь: https://stackoverflow.com/questions/22694289/call-external-api-function-from-controller-laravel-4

Взгляните на 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", ....
  • 1
    Также см. Ответ Джереми Геса: «Выглядит великолепно, хотя на самом деле он не отвечает на мой вопрос о способе Laravel, я непременно посмотрю на это». Спасибо!
  • 1
    @Chilion, Al Snoek БЫЛ направлять вас к официальному пакету Laravel. Он предварительно установлен в группе поставщиков laravel.
Показать ещё 2 комментария
68

Мы можем использовать пакет Guzzle в Laravel, это PHP-клиент HTTP для отправки HTTP-запросов.

Вы можете установить Guzzle через композитора

composer require guzzlehttp/guzzle:~6.0

Или вы можете указать Guzzle в качестве зависимости в вашем проекте существующего composer.json

{
   "require": {
      "guzzlehttp/guzzle": "~6.0"
   }
}

Пример кода в laravel 5 с использованием Guzzle, как показано ниже,

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"...'
}
  • 2
    Спасибо за ваш ответ. Также смотрите мой комментарий ниже моего поста; Спустя долгое время создали действительно маленький рассказ о том, как использовать Guzzle. Из айснока его ответ. chilion.nl/laravel-post-requests-with-guzzle - Chilion 19 августа в 12:09 √
  • 1
    Ваш комментарий // "200" должен быть // 200 потому что возвращаемое значение является целым числом.
Показать ещё 1 комментарий
38

Вы просто хотите вызвать внешний URL-адрес и использовать результаты? PHP делает это из коробки, если мы говорим о простом запросе GET для чего-то, обслуживающего JSON:

$json = json_decode(file_get_contents('http://host.com/api/stuff/1'), true);

Если вы хотите сделать почтовый запрос, это немного сложнее, но есть множество примеров, как сделать это с помощью curl.

Итак, я думаю, что вопрос: что именно вы хотите?

  • 0
    Я хочу иметь возможность использовать все виды функций REST API. Так что да, мне понадобится POST. Я думал (надеялся ...), что у Laravel будут какие-то методы, чтобы сделать это вроде Laravel, но тогда я буду придерживаться PHP. Благодарю.
14

Если вам просто нужно запустить запрос на внешний API, вы можете использовать класс Laravel Request следующим образом (предположим, что вы используете запрос GET)

$request = Request::create('http://your-api.com', 'GET');

Но если вам нужно получить содержание ответа, вы можете использовать Laracurl пакет следующим образом:

$response = Laracurl::get('http://your-api.com');
  • 0
    Вы связаны с Ларакурлом. Кажется, это хороший пакет, но он не работает в текущей версии Laravel (есть вилки, которые сделали его совместимым с Laravel 5.4). Проблема, которую я вижу с Ларакурлом, состоит в следующем
  • 0
    как насчет почтового метода?
Показать ещё 1 комментарий
1

Вы можете делать запросы с использованием Laravel и без внешних пакетов

$request = \Illuminate\Http\Request::create('http://your-api.com', 'POST', ['param1' => 'value1', 'param2' => 'value2']);

Функция запроса предоставляется, поскольку Laravel использует пакет запроса Symfony.

1

Вы можете использовать Httpful:

Веб-сайт: http://phphttpclient.com/

Github: https://github.com/nategood/httpful

  • 0
    Выглядит великолепно, хотя на самом деле он не отвечает на мой вопрос о способе Laravel, но я обязательно в этом разбираюсь. Спасибо!
  • 0
    Laravel не получил этого из коробки, но Laravel работает под управлением composer, так что вы можете использовать библиотеку вроде Httpful, чтобы выполнить работу. Кстати, вы можете использовать также reports.ryanmccue.info
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню