我想将整个传入数据(即$request
)传递给curl,而不想将其作为subjectId=>1
发布到端点中的特定字段,因为我每次都为不同的端点运行此curl请求。下面的curl请求将工作,如果CURLOPT_URL => $url . $subjectId
,是给定的。当我的输入为每个终点改变时,我必须把所有的输入都传递给旋度,我不能把它作为任意的$subjectId
传递。有什么办法可以做到吗?
当前,dd($Response);
返回null
我给一个像这样的邮递员输入:
{
"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()
返回的URL不带查询字符串参数,而$request->fullUrl()
返回的URL带所有查询字符串参数,所以我们可以使用str_replace
和一个空的替换来删除非查询部分。请注意,$query_string
已经从?
开始了,所以没有必要自己添加。
其他建议除非你的Laravel API是后端API的1:1副本,否则我强烈建议编写一个与后端API接口的类,然后使用依赖注入将其提供给你的Laravel控制器。例如
class CourseCatalogApi {
public function getSubjectsInCourse(String $course){
... // your curl code here
}
}
最后,因为你已经使用了Laravel,没有必要用curl编写这么低级的代码来发出HTTP请求。考虑使用guzzlehttp,它已经是Laravel的一个依赖项。