将整个传入数据传递给 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.

的依赖项