为何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
相关产品推荐
相关产品推荐

