当 curl 和 Postman 完全正常时出现 Guzzle 错误 "Call to a member function getStatusCode() on null"
Guzzle error "Call to a member function getStatusCode() on null" when curl and Postman are perfectly fine
我在项目中将 Guzzle 设置为 Laravel 6 的 HTTP 客户端。它运行良好,并在每次 API 命中时给出响应。但突然 return 出现“在 null 时调用成员函数 getStatusCode()”错误。
我试过使用 Postman 和 curl 来点击 API,当 Guzzle 没有时,他们 return 做出了正确的响应。
RequestException 响应的 return 为 null,而不是 returning 响应,print_r。
我已经尝试调试 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
但问题仍然存在
我找到了问题和解决方案。
所以我正在使用 Log
记录异常,发现我的 $uri
无效,因为我的 API BASE URL 未找到在 .env
文件上。所以解决方案是做 php artisan cache:clear
并且大口工作。
对于阅读此问题的任何人,如果堆栈跟踪没有帮助您,请记得尝试 Log
。
我在项目中将 Guzzle 设置为 Laravel 6 的 HTTP 客户端。它运行良好,并在每次 API 命中时给出响应。但突然 return 出现“在 null 时调用成员函数 getStatusCode()”错误。
我试过使用 Postman 和 curl 来点击 API,当 Guzzle 没有时,他们 return 做出了正确的响应。
RequestException 响应的 return 为 null,而不是 returning 响应,print_r。
我已经尝试调试 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
但问题仍然存在
我找到了问题和解决方案。
所以我正在使用 Log
记录异常,发现我的 $uri
无效,因为我的 API BASE URL 未找到在 .env
文件上。所以解决方案是做 php artisan cache:clear
并且大口工作。
对于阅读此问题的任何人,如果堆栈跟踪没有帮助您,请记得尝试 Log
。