У меня проблема, с которой я не мог разобраться, у меня есть класс, который подключается к спокойному api с помощью Guzzle, он работает в tinker, но в контроллере я всегда получаю несанкционированную ошибку 401 с использованием тех же данных подключения.
ApiConnectionClass
use App\ApiData;
use Carbon\Carbon;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Psr7;
class ApiConnectionClass
{
var $conn_data;
var $client;
public function __construct()
{
$this->conn_data = ApiData::findOrFail(1);
$this->client = new Client(['base_uri' => $this->conn_data->url]);
}
public function lista_pruebas(){
try{
$response = $this->client->request('GET', 'pruebas/detalles', [
'verify' => false,
'headers' => ['Authorization' => 'Bearer ' . $this->conn_data->access_token],
]);
} catch (GuzzleException $e) {
dump(Psr7\str($e->getRequest()));
if ($e->hasResponse()) {
dd(Psr7\str($e->getResponse()));
}
}
return json_decode($response->getBody()->getContents());
}
в tinker я получаю правильный ответ json
$api = new App\Classes\ApiConnectionClass();
$api->lista_pruebas();
ApiController
use App\Classes\ApiConnectionClass;
class ApiController extends Controller
{
public function lista_pruebas(){
$api = new ApiConnectionClass();
$lista = $api->lista_pruebas();
return view('pruebas.index', compact('lista'));
}
}
Ответ ApiConnectionClass, вызванный из контроллера
""" HTTP/1.0 401 Unauthorized\r\n Date: Wed, 22 Aug 2018 16:20:58 GMT\r\n Server: Apache/2.4.33 (Win64) PHP/7.2.4\r\n Vary: Authorization\r\n X-Powered-By: PHP/7.2.4\r\n Cache-Control: no-cache, private\r\n Content-Length: 13\r\n Connection: close\r\n Content-Type: text/html; charset=UTF-8\r\n \r\n Unauthorized. """






Это не похоже на ошибку в том, что вы делаете в коде, потому что я вижу это использование жрать повсюду в сети. Однако у меня есть пара предложений. Tinker использует другую среду выполнения, чем ваше приложение (php-cli vs php-fpm соответственно), это может вызвать проблему, потому что в одном сценарии (php-cli) php идет напрямую из вашего ящика на сервер api, а в другом - через ваш веб-сервер перед отправкой запроса (php-fpm). Первое, что нужно сделать, это очистить кеш и конфигурацию laravel с помощью php artisan cache: clear и php artisan config: clear, если это не удастся, я бы посмотрел на ограничения или настройки междоменного доступа на вашем веб-сервере. Удачи!
Отлично, ты спас мне жизнь, это была кросс-доменная проблема.
Мой код 2cents на английском, он вам очень поможет. Удачи!