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

使用Axios调用CGI接口时email、password参数无法被后端获取问题求助

问题原因

你浏览器直接访问链接时,发送的是GET请求,参数拼接在URL查询字符串中,Perl CGI模块的param()方法可以直接解析这类参数。
而你用Axios、Postman发送的是POST请求,Axios默认会把请求参数序列化为application/json格式放在请求体中,Perl CGI模块原生的param()方法不会自动解析JSON格式的请求体,所以读取出来的值是空的。

解决方法

方案1:修改前端Axios请求格式(无需改后端代码)

把POST请求的参数改为application/x-www-form-urlencoded格式发送,和表单提交的格式一致,CGI的param()方法可以直接解析。
可以用URLSearchParams或者qs库(Axios官方推荐的序列化工具)处理参数:

// 方法1:用URLSearchParams(无需额外引入库)
const handleLogin = (data, setSubmitting) => {
  const url = 'https://mydesitte.or/register.cgi'; 
  const params = new URLSearchParams();
  params.append('email', data.email);
  params.append('password', data.password);
  axios
    .post(url, params)
    .then((response) => {
      alert(data.email);
      setSubmitting(false);
    }).catch(error => {
      alert(error);
      setSubmitting(false);
    });  
}

// 方法2:用qs库序列化(适合参数复杂的场景)
// 先安装qs:npm install qs
import qs from 'qs';
const handleLogin = (data, setSubmitting) => {
  const url = 'https://mydesitte.or/register.cgi'; 
  axios
    .post(url, qs.stringify(data))
    .then((response) => {
      alert(data.email);
      setSubmitting(false);
    }).catch(error => {
      alert(error);
      setSubmitting(false);
    });  
}

方案2:修改后端CGI代码(适配JSON格式请求)

如果你希望后端支持JSON格式的POST请求,可以新增代码解析原始请求体中的JSON内容:

use CGI;
use JSON; # 需要先安装Perl的JSON模块

my $cgi = new CGI;  
# 读取原始POST请求体
my $raw_input = $cgi->param('POSTDATA');
# 解析JSON为哈希结构
my $input_data = decode_json($raw_input);
# 读取对应参数
my $email = $input_data->{email};
my $password  = $input_data->{password};

测试注意事项

用Postman测试时需要和你选择的方案对应:

  • 如果用方案1,POST请求的Body选择x-www-form-urlencoded或者form-data格式填写参数
  • 如果用方案2,POST请求的Body选择raw,格式设置为JSON,填写JSON格式的参数

内容的提问来源于stack exchange,提问作者Pedro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 17:45:04