You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:01:11