PHP Laravel BaseRepository CURL错误[CURL_setopt_array():提供的资源不是有效的CURL句柄资源]
我在Laravel中制作了一个小而简单的web应用程序,我使用API从中获取数据,并以用户友好的方式可视化。为了从API处理/获取数据,我在我的应用程序中创建了一个BaseRepository,但我遇到了以下错误:PHP Laravel BaseRepository CURL错误[CURL_setopt_array():提供的资源不是有效的CURL句柄资源],php,laravel,api,curl,Php,Laravel,Api,Curl,我在Laravel中制作了一个小而简单的web应用程序,我使用API从中获取数据,并以用户友好的方式可视化。为了从API处理/获取数据,我在我的应用程序中创建了一个BaseRepository,但我遇到了以下错误:“curl\u setopt\u array():提供的资源不是有效的curl句柄资源” 下面是它的样子 如果有人能帮忙,那就太好了 这是我的密码: <?php namespace App\Repositories; // Class BaseRepository. c
“curl\u setopt\u array():提供的资源不是有效的curl句柄资源”
下面是它的样子
如果有人能帮忙,那就太好了
这是我的密码:
<?php
namespace App\Repositories;
// Class BaseRepository.
class BaseRepository
{
public $curl = null;
public function __construct()
{
$this->curl = curl_init();
}
public function getAccessToken()
{
curl_setopt_array($this->curl, array(
CURLOPT_URL => "https://identity.vwgroup.io/oidc/v1/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "grant_type=client_credentials&client_id=MY_ID_GOES_HERE&client_secret=MY_CLIENT_SECRET",
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache",
"Content-Type: application/x-www-form-urlencoded",
"Postman-Token: 84e72567-25d5-42ba-8a94-fe88e6bcc41d",
"cache-control: no-cache",
),
));
$response = curl_exec($this->curl);
$err = curl_error($this->curl);
curl_close($this->curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// Convert JSON string to Object
$responseObject = json_decode($response);
$accessToken = $responseObject->access_token; // Access Object data
return $accessToken;
}
}
public function getCountries()
{
curl_setopt_array($this->curl, array(
CURLOPT_URL => "https://api.productdata.vwgroup.com/v2/countries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
"Authorization: bearer " . $this->getAccessToken(),
"Postman-Token: e6625e0a-fc50-4382-8812-8d151457dcab,67edecb8-64bd-4c93-9892-ec1061d5f210",
"cache-control: no-cache,no-cache",
),
));
$response = curl_exec($this->curl);
$err = curl_error($this->curl);
curl_close($this->curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// Convert JSON string to Object
$responseObject = json_decode($response, true);
$data = array('data' => $responseObject['data']);
return $data;
}
}
}
我猜您的一个子存储库类正在定义一个\u construct()
方法,而您忘了调用它内部的父::\u construct()
,因此从未调用curl\u init()
方法
编辑:菲尔的评论是你问题的另一个很可能的原因。在一个方法中调用curl\u close()
我真的建议将curl\u init()
移动到每个存储库方法。您的请求不相关,可能共享不同的选项和配置。通过修改单个cURL实例,您可以共享您不打算共享的选项。它还允许您在每个子存储库类中使用\u construct()
,而不必担心BaseRepository及其构造函数(您可以删除它)。我猜您的一个子存储库类正在定义\u construct()
方法,而您忘记调用父::\u construct()
在它内部,因此永远不会调用curl\u init()
方法
编辑:菲尔的评论是你问题的另一个很可能的原因。在一个方法中调用curl\u close()
我真的建议将curl\u init()
移动到每个存储库方法。您的请求不相关,可能共享不同的选项和配置。通过修改单个cURL实例,您可以共享您不打算共享的选项。它还允许您在每个子存储库类中使用\u construct()
,而不必担心BaseRepository及其构造函数(您可以删除它们)。如何调用这些方法?在每个方法的末尾使用curl\u close($this->curl)
将使同一类实例上的另一个方法无法使用。啊,我现在看到了。您可以从getCountries()
调用getAccessToken()。查看在共享句柄上使用curl\u close()
的问题?然后从我的控制器调用这些方法,然后控制器将信息传递到我的视图如何调用这些方法?在每个方法的末尾使用curl\u close($this->curl)
将使同一类实例上的另一个方法无法使用。啊,我现在看到了。您可以从getCountries()
调用getAccessToken()。看到在共享句柄上使用curl\u close()
的问题了吗?然后从我的控制器调用这些方法,然后将信息传递到我的视图谢谢它工作了只需将它放入函数curl\u init()
谢谢它工作了只需将它放入函数curl\u init()