За последние 24 часа нас посетили 17180 программистов и 1650 роботов. Сейчас ищут 1042 программиста ...

Отправка запросов

Тема в разделе "Laravel", создана пользователем lordconst, 16 фев 2021.

  1. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    Как в Laravel отправлять запросы к внешнему API? Если создаю контроллер и в нем прописываю метод с отправкой запроса (например, с помощью Guzzle), то он отправляется не на нужный ресурс (хотя его адрес я прописываю в строке запроса)? В дебаггере видно, что он отправляется из-под моего проекта (см. скрин).
    И еще вопрос: если мне требуется отправить post запрос на внешний api и я указываю в маршруте и в самой форме метод post, то пишет что метод пост недоступен для текущего маршрута. С чем это связано?
    update: прочитал, что маршруты к API фиксируются в routes/api.php, но толком не понял как именно нужно делать. Прошу подсказать что почитать в документации, чтобы отправить запрос к API. Нахожу только как создать свои API, а вот как отправлять запросы к уже имеющимся api, не могу найти
     

    Вложения:

    #1 lordconst, 16 фев 2021
    Последнее редактирование: 16 фев 2021
  2. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    PHP:
    1. // Create a client with a base URI
    2. $client = new GuzzleHttp\Client(['base_uri' => 'https://foo.com/api/']);
    3. // Send a request to https://foo.com/api/test
    4. $response = $client->request('GET', 'test');
    5. // Send a request to https://foo.com/root
    6. $response = $client->request('GET', '/root');
    создаешь объект клиента, и там указываешь урл внешней апишки..
    а потом когда когда делаешь реквесты то просто указываешь относительный путь...
     
    TeslaFeo нравится это.
  3. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    Не то, прикладываю свой код.
    PHP:
    1. public function login(Request $request) {
    2.  
    3.         $client = new Client([
    4.             // Base URI is used with relative requests
    5.             'base_uri' => 'адрес апи',
    6.             // You can set any number of default request options.
    7.             'timeout'  => 2.0,
    8.         ]);
    9.  
    10.         try {
    11.             $response = $client->request(
    12.                 'POST',
    13.                 'относительный адрес',
    14.                 [
    15.                     'action' => $request->action,
    16.                     'email' => $request->email,
    17.                     'password' => $request->password,
    18.                     'remember' => $request->remember
    19.                 ]);
    20.         } catch (GuzzleException $e) {
    21.         }
    22.  
    23.         return view('auth', [
    24.             'result' => $response->getStatusCode()
    25.         ]);
    26.     }
    Возвращает статус 200. В Fiddler вижу, что запрос отправляется от имени моего проекта, то бишь как на скрине в первом посте
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    похоже вы путаете - и пытаетесь сделать свой АПИ и что-то обрабатывать там, вместо того, чтобы отправлять что-то во внешний АПИ
    роуты - они для проекта Лары, не для внешнего апи

    Вы конкретно скажите что вы хотите?
    в обработчике каком - то запросы к внешнему АПИ слать?
    или у вас Свой АПИ - в котором есть внешнего АПИ ... или что?
     
  5. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    Я хочу слать в своем обработчике запросы к внешнему API. Как и где это можно сделать?
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    да вам же уже подсказали...
    PHP:
    1. // Create a client with a base URI
    2. $client = new GuzzleHttp\Client(['base_uri' => 'https://foo.com/api/']);
    3. // Send a request to https://foo.com/api/test
    4. $response = $client->request('GET', 'test');
    5. // Send a request to https://foo.com/root
    6. $response = $client->request('GET', '/root');
    чем не устраивает? Что не понятно....?
     
  7. lordconst

    lordconst Активный пользователь

    С нами с:
    7 дек 2019
    Сообщения:
    154
    Симпатии:
    1
    Не устраивает тем, что и это тоже не работает. Во-первых, я уже пробовал этот вариант (ага, я умею читать документацию). Во-вторых, я переделал запрос под Http:post у лары 8. https://laravel.com/docs/8.x/http-client#guzzle-options
    PHP:
    1. public function login(Request $request) {
    2.  
    3.         $response = Http::post('здесь указываю путь', [
    4.             'action' => 'login',
    5.             'email' => $request->email,
    6.             'password' => $request->password,
    7.             'remember' => 'on',
    8.         ]);
    9.  
    10.         return view('auth', [
    11.             'result' => $response->headers()
    12.         ]);
    13.     }
    На данный момент следующая проблема: я вижу что запрос отправляется на нужный мне сервер, но в ответе присылаются не все куки. Как это можно исправить? Прилагаю скрины, на первом ответ сервера после моего запроса, а на втором ответ сервера от оригинального запроса (как если бы я стандартным способом из-под пользователя в браузере делал). Как видно, часть куки вообще не записывается.
     

    Вложения: