将所有传入数据传递给curl - Laravel



我想将整个传入数据(即$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的一个依赖项。

相关内容

  • 没有找到相关文章

最新更新