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

为何Postman无法发送Integer类型值?API测试类型校验报错

问题描述

我有一个API,对应的PHP文件会校验客户端发送的值类型,若值类型非Integer则抛出错误。示例代码如下:

<?php
$userId = $_POST["userId"];

if (!is_int($userId) || $userId <= 0)
    exit(json_encode(array("REQUEST_STATUS" => 800))); //800在客户端会被解析为意外错误

// 后续业务逻辑
...

使用Postman发送请求时,PHP文件始终返回意外错误,原因是Postman发送的userId为String类型。目前客户端尚未就绪,只能通过Postman测试API;临时在PHP中将String转为Integer的方案因涉及文件过多难以实施,请问如何通过Postman或其他方式发送Integer类型值?

解决方案

首先明确:PHP中通过表单编码(application/x-www-form-urlencoded或multipart/form-data)提交的参数,$_POST中的值永远是字符串类型,因此is_int($_POST["userId"])会始终返回false,这是当前PHP代码校验逻辑的固有问题。如果不想大规模修改PHP代码,可通过以下方式实现测试:

方法1:Postman发送JSON格式请求(配合单文件临时修改)

  • 打开Postman,新建POST请求,填写目标API地址
  • 切换到Body标签,选择raw格式,在下拉菜单中选中JSON
  • 输入JSON格式的请求体,将userId设为数字类型:
    {"userId": 123}
    
  • Postman会自动添加Content-Type: application/json请求头,无需手动配置
  • 针对当前测试的PHP文件,在代码最顶部临时添加以下代码,将JSON请求体解析到$_POST:
    $rawInput = file_get_contents('php://input');
    if (!empty($rawInput) && json_decode($rawInput) !== null) {
        $_POST = json_decode($rawInput, true);
    }
    
  • 发送请求,此时$_POST["userId"]会被识别为Integer类型,is_int校验将通过

方法2:使用curl命令发送JSON请求

如果不想使用Postman,也可以直接用curl命令发送JSON请求,同样配合上述单文件临时修改:

curl -X POST -H "Content-Type: application/json" -d '{"userId": 123}' https://your-api-domain.com/target-path

补充说明

如果完全不想修改任何PHP代码,实际上无法让is_int($_POST["userId"])返回true——因为表单提交的参数在PHP中只会被解析为字符串类型。建议后续优化PHP代码的校验逻辑,比如改用filter_var($userId, FILTER_VALIDATE_INT)判断是否为有效整数,而非严格检查变量类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:31:01