将整个传入数据传递给 curl - Laravel
Pass whole incoming data to curl - Laravel
我想将整个传入数据(即 $request
)传递给 curl,不想 post 传递给端点中的特定字段,作为 subjectId=>1
作为 运行 这个 curl 请求每次都针对不同的端点。如果给出 CURLOPT_URL => $url . $subjectId
,下面的 curl 请求将起作用。当我的输入针对每个端点发生变化时,我必须将输入中的所有内容传递给 curl ,我不能将其作为数组 $subjectId
传递。有什么办法吗?
目前,dd($Response);
returns null
我正在给 post 人工输入,如下所示:
{
"subjectId":"1"
}
卷曲
public function getContentqApiPost(Request $request)
{
$token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.ey";
$headers = [
"Accept: application/json",
"Authorization: Bearer " . $token
];
$url="http://127.0.0.1:9000/api/courses/course-per-subject";
$subjectId = "?subjectId=$request->subjectId";
$ch = curl_init();
$curlConfig = array(
// CURLOPT_URL => $url . $subjectId,
CURLOPT_URL => $url . $request,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers,
);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt_array($ch, $curlConfig);
$result = trim(curl_exec($ch));
$Response = json_decode($result, true);
if (curl_errno($ch)) {
$error_msg = curl_error($ch);
echo $error_msg;
}
curl_close($ch);
return $Response;
}
如果您想将 $request 的所有参数传递给 curl:
$queryParams = '';
$delimeter = '?';
foreach($request->all() as $k => $v){
$queryParams .= "$delimeter$k=$v";
$delimeter = '&';
}
另外你只能传递你想要的参数:
foreach($request->only(['subjectId']) as $k => $v){
// code here
}
最后你有:
CURLOPT_URL => $url . $queryParams,
回答
假设您想按原样传递整个 GET 查询字符串:
$query_string = str_replace($request->url(), "", $request->fullUrl());
$url = "http://localhost:9000/api/courses/course-per-subject" . $query_string;
这是有效的,因为 $request->url()
returns the URL without the query string parameters, while $request->fullUrl()
returns URL 带有所有查询字符串参数,所以我们可以使用 str_replace
和空替换来删除非查询部分。请注意,$query_string
已经以 ?
开头,因此无需自行添加。
其他建议
除非你的 Laravel API 是后端 API 的 1:1 副本,我强烈建议编写一个 class 与后端交互 API,然后使用 dependency injection 将其提供给您的 Laravel 控制器。例如
class CourseCatalogApi {
public function getSubjectsInCourse(String $course){
... // your curl code here
}
}
最后,由于您已经在使用 Laravel,因此无需使用 curl 编写如此低级的代码来发出 HTTP 请求。考虑使用 guzzlehttp,它已经是 Laravel.
的依赖项
我想将整个传入数据(即 $request
)传递给 curl,不想 post 传递给端点中的特定字段,作为 subjectId=>1
作为 运行 这个 curl 请求每次都针对不同的端点。如果给出 CURLOPT_URL => $url . $subjectId
,下面的 curl 请求将起作用。当我的输入针对每个端点发生变化时,我必须将输入中的所有内容传递给 curl ,我不能将其作为数组 $subjectId
传递。有什么办法吗?
目前,dd($Response);
returns null
我正在给 post 人工输入,如下所示:
{
"subjectId":"1"
}
卷曲
public function getContentqApiPost(Request $request)
{
$token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.ey";
$headers = [
"Accept: application/json",
"Authorization: Bearer " . $token
];
$url="http://127.0.0.1:9000/api/courses/course-per-subject";
$subjectId = "?subjectId=$request->subjectId";
$ch = curl_init();
$curlConfig = array(
// CURLOPT_URL => $url . $subjectId,
CURLOPT_URL => $url . $request,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers,
);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt_array($ch, $curlConfig);
$result = trim(curl_exec($ch));
$Response = json_decode($result, true);
if (curl_errno($ch)) {
$error_msg = curl_error($ch);
echo $error_msg;
}
curl_close($ch);
return $Response;
}
如果您想将 $request 的所有参数传递给 curl:
$queryParams = '';
$delimeter = '?';
foreach($request->all() as $k => $v){
$queryParams .= "$delimeter$k=$v";
$delimeter = '&';
}
另外你只能传递你想要的参数:
foreach($request->only(['subjectId']) as $k => $v){
// code here
}
最后你有:
CURLOPT_URL => $url . $queryParams,
回答
假设您想按原样传递整个 GET 查询字符串:
$query_string = str_replace($request->url(), "", $request->fullUrl());
$url = "http://localhost:9000/api/courses/course-per-subject" . $query_string;
这是有效的,因为 $request->url()
returns the URL without the query string parameters, while $request->fullUrl()
returns URL 带有所有查询字符串参数,所以我们可以使用 str_replace
和空替换来删除非查询部分。请注意,$query_string
已经以 ?
开头,因此无需自行添加。
其他建议
除非你的 Laravel API 是后端 API 的 1:1 副本,我强烈建议编写一个 class 与后端交互 API,然后使用 dependency injection 将其提供给您的 Laravel 控制器。例如
class CourseCatalogApi {
public function getSubjectsInCourse(String $course){
... // your curl code here
}
}
最后,由于您已经在使用 Laravel,因此无需使用 curl 编写如此低级的代码来发出 HTTP 请求。考虑使用 guzzlehttp,它已经是 Laravel.
的依赖项