Как в Laravel отправлять запросы к внешнему API? Если создаю контроллер и в нем прописываю метод с отправкой запроса (например, с помощью Guzzle), то он отправляется не на нужный ресурс (хотя его адрес я прописываю в строке запроса)? В дебаггере видно, что он отправляется из-под моего проекта (см. скрин). И еще вопрос: если мне требуется отправить post запрос на внешний api и я указываю в маршруте и в самой форме метод post, то пишет что метод пост недоступен для текущего маршрута. С чем это связано? update: прочитал, что маршруты к API фиксируются в routes/api.php, но толком не понял как именно нужно делать. Прошу подсказать что почитать в документации, чтобы отправить запрос к API. Нахожу только как создать свои API, а вот как отправлять запросы к уже имеющимся api, не могу найти
PHP: // Create a client with a base URI $client = new GuzzleHttp\Client(['base_uri' => 'https://foo.com/api/']); // Send a request to https://foo.com/api/test $response = $client->request('GET', 'test'); // Send a request to https://foo.com/root $response = $client->request('GET', '/root'); создаешь объект клиента, и там указываешь урл внешней апишки.. а потом когда когда делаешь реквесты то просто указываешь относительный путь...
Не то, прикладываю свой код. PHP: public function login(Request $request) { $client = new Client([ // Base URI is used with relative requests 'base_uri' => 'адрес апи', // You can set any number of default request options. 'timeout' => 2.0, ]); try { $response = $client->request( 'POST', 'относительный адрес', [ 'action' => $request->action, 'email' => $request->email, 'password' => $request->password, 'remember' => $request->remember ]); } catch (GuzzleException $e) { } return view('auth', [ 'result' => $response->getStatusCode() ]); } Возвращает статус 200. В Fiddler вижу, что запрос отправляется от имени моего проекта, то бишь как на скрине в первом посте
похоже вы путаете - и пытаетесь сделать свой АПИ и что-то обрабатывать там, вместо того, чтобы отправлять что-то во внешний АПИ роуты - они для проекта Лары, не для внешнего апи Вы конкретно скажите что вы хотите? в обработчике каком - то запросы к внешнему АПИ слать? или у вас Свой АПИ - в котором есть внешнего АПИ ... или что?
да вам же уже подсказали... PHP: // Create a client with a base URI $client = new GuzzleHttp\Client(['base_uri' => 'https://foo.com/api/']); // Send a request to https://foo.com/api/test $response = $client->request('GET', 'test'); // Send a request to https://foo.com/root $response = $client->request('GET', '/root'); чем не устраивает? Что не понятно....?
Не устраивает тем, что и это тоже не работает. Во-первых, я уже пробовал этот вариант (ага, я умею читать документацию). Во-вторых, я переделал запрос под Httpost у лары 8. https://laravel.com/docs/8.x/http-client#guzzle-options PHP: public function login(Request $request) { $response = Http::post('здесь указываю путь', [ 'action' => 'login', 'email' => $request->email, 'password' => $request->password, 'remember' => 'on', ]); return view('auth', [ 'result' => $response->headers() ]); } На данный момент следующая проблема: я вижу что запрос отправляется на нужный мне сервер, но в ответе присылаются не все куки. Как это можно исправить? Прилагаю скрины, на первом ответ сервера после моего запроса, а на втором ответ сервера от оригинального запроса (как если бы я стандартным способом из-под пользователя в браузере делал). Как видно, часть куки вообще не записывается.