Я настраиваю Guzzle в качестве HTTP-клиента Laravel 6 в своем проекте. Он отлично работал и давал ответы на каждое обращение к API. Но вдруг он возвращает вызов функции-члену getStatusCode() при нулевой ошибке.
Я пытался использовать Postman и curl для обращения к API, и они возвращают правильный ответ, когда Guzzle не работает.
Вместо возврата ответа print_r для ответа RequestException возвращает значение null.
Я пытался отладить REST API, чтобы проверить, куда направляется запрос при попадании в него с помощью Guzzle, и запрос даже не попал в целевую функцию.
Вот мой код Guzzle:
class ApiCallback
{
public static function request($method, $uri, $params = [], $useAccessToken = true){
$client = new \GuzzleHttp\Client();
$response = null;
$jsonObj = null;
try{
if($useAccessToken){
$response = $client->request(
strtoupper($method),
$uri,
[
"headers" =>[
'Accept' => '*/*',
"Authorization" => "Bearer ".Session::get('access_token'),
'Content-Type' => 'application/json',
'User-Agent' => 'saranaku-'.Session::get('id'),
'Content-Length' => '0',
'Accept-Encoding' => 'gzip, deflate, br',
'Connection' => 'keep-alive'
]
,
"body" => \json_encode(
$params
)
]
);
}else{
$response = $client->request(
strtoupper($method),
$uri,
[
"headers" =>[
'Accept' => '*/*',
'Content-Type' => 'application/json',
'User-Agent' => "saranaku-guest",
'Content-Length' => '0',
'Accept-Encoding' => 'gzip, deflate, br',
'Connection' => 'keep-alive'
]
,
"body" => \json_encode(
$params
)
]
);
}
$jsonObj = json_decode((string) $response->getBody());
return new BaseResponse(
$jsonObj->status ?? false,
$jsonObj->code ?? null,
$jsonObj->message ?? null ,
$jsonObj->data ?? null
);
}catch(RequestException $e){
// echo Psr7\str($e->getRequest());
// echo Psr7\str($e->getResponse());
$jsonObj = $e->getResponse();
print_r($e->getResponse());
}
return new BaseResponse(
$jsonObj->status ?? false,
$jsonObj->getStatusCode() ?? null,
$jsonObj->getReasonPhrase() ?? null ,
$jsonObj->data ?? null
);
}
public static function requestWithoutAccessToken($method, $url, $params = []){
return ApiCallback::request($method, $url, $params, false);
}
}
final class BaseResponse
{
public $status;
public $code;
public $message;
public $data;
public function __construct($status,$code,$message = "",$data = [])
{
$this->status = $status;
$this->code = $code;
$this->message = $message;
$this->data = $data;
}
}
Дополнительная информация:
- REST API работает на локальном хосте с конечной точкой: /v1/login.
- HTTP-метод — POST.
- REST API использует Java Spring Boot v1.5.6.
- Тело запроса
{
"data":{
"username": "username_string",
"password": "password_string"
}
}
- Я пробовал очищать кеши и делать
composer dump-autoload
, но проблема все еще сохраняется.