Laravel 9中如何携带查询参数发送POST请求?
问题描述
我尝试发送携带查询参数的POST请求(效果如截图所示),使用了Laravel的Http::post方法,但该方法默认会发送JSON格式数据。而目标API仅支持表单参数形式传参,我按以下代码尝试但未成功:
原控制器代码(FormController.php)
public function post_parameter_wise(Request $request,$lp_campaign_id, $lp_campaign_key, $first_name, $last_name, $email, $phone, $zip_code){ $form = new Form(); $fName = $form->first_name = $request->get($first_name); $lName = $form->last_name = $request->get($last_name); $cCmail = $form->email = $request->get($email); $cPhone = $form->phone = $request->get($phone); $zCode = $form->zip_code = $request->get($zip_code); $response = Http::post("https://t.vivint.com/post.do", [ "lp_campaign_id" => $lp_campaign_id, "lp_campaign_key" => $lp_campaign_key, // "lp_supplier_id" => "", "first_name" => $fName, "last_name" => $lName, "email" => $cCmail, "phone" => $cPhone, "zip_code" => $zCode ]); dd($response); }
解决方法
1. 指定表单格式发送请求
Laravel的Http::post默认将数组转为JSON,要发送表单格式(application/x-www-form-urlencoded)的请求,需调用asForm()方法声明:
$response = Http::asForm()->post("https://t.vivint.com/post.do", [ "lp_campaign_id" => $lp_campaign_id, "lp_campaign_key" => $lp_campaign_key, // "lp_supplier_id" => "", "first_name" => $fName, "last_name" => $lName, "email" => $cCmail, "phone" => $cPhone, "zip_code" => $zCode ]);
2. 修正请求参数获取逻辑
原代码里把路由参数($first_name等)传给了$request->get(),这会导致无法正确获取请求体里的字段值。正确的做法是直接传入请求体的字段名,同时移除路由中多余的参数:
public function post_parameter_wise(Request $request, $lp_campaign_id, $lp_campaign_key){ $form = new Form(); $fName = $form->first_name = $request->get('first_name'); $lName = $form->last_name = $request->get('last_name'); $cCmail = $form->email = $request->get('email'); $cPhone = $form->phone = $request->get('phone'); $zCode = $form->zip_code = $request->get('zip_code'); $response = Http::asForm()->post("https://t.vivint.com/post.do", [ "lp_campaign_id" => $lp_campaign_id, "lp_campaign_key" => $lp_campaign_key, // "lp_supplier_id" => "", "first_name" => $fName, "last_name" => $lName, "email" => $cCmail, "phone" => $cPhone, "zip_code" => $zCode ]); dd($response); }
关键说明
asForm()会自动设置请求头Content-Type为application/x-www-form-urlencoded,让参数以表单形式发送,匹配目标API的要求。- 路由参数只保留
lp_campaign_id和lp_campaign_key即可,用户提交的表单字段通过$request->get('字段名')获取。
内容的提问来源于stack exchange,提问作者Sakib ovi
相关产品推荐
相关产品推荐

