Laravel中如何将全部传入请求数据完整传递给curl请求
问题原因
- 你当前直接将
$request对象拼接到URL后的写法是错误的:$request是Illuminate\Http\Request类的实例,直接做字符串拼接无法输出符合规范的查询参数格式,会导致请求的目标地址非法,接口返回非JSON内容,最终json_decode解析后返回null - 你需要先将请求携带的所有参数转为对应格式后再传递给curl
实现方案
根据你调用的目标接口请求方式,对应选择以下适配方案即可,不需要单独处理每个入参字段:
场景1:目标接口为GET请求(你当前代码使用的是GET)
通过http_build_query将所有请求参数自动转为key1=value1&key2=value2格式的查询串,拼接在URL后即可:
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"; // 获取所有请求参数,自动拼接为标准查询字符串 $queryString = http_build_query($request->all()); $fullUrl = $url . '?' . $queryString; $ch = curl_init(); $curlConfig = array( CURLOPT_URL => $fullUrl, 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 = curl_exec($ch); if (curl_errno($ch)) { $error_msg = curl_error($ch); echo $error_msg; curl_close($ch); return null; } curl_close($ch); $Response = json_decode(trim($result), true); return $Response; }
场景2:目标接口为POST请求(接收JSON格式参数)
如果接口要求参数放在请求体中传递,直接将所有请求参数转成JSON后赋值给CURLOPT_POSTFIELDS即可,核心配置修改如下:
$curlConfig = array( CURLOPT_URL => $url, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_RETURNTRANSFER => true, // 新增JSON格式请求头 CURLOPT_HTTPHEADER => array_merge($headers, ["Content-Type: application/json"]), // 所有参数转JSON后放在请求体传递 CURLOPT_POSTFIELDS => json_encode($request->all()) );
内容的提问来源于stack exchange,提问作者user16772834
相关产品推荐
相关产品推荐

