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

Windows 11下Postman与curl调用设备API均异常的问题求助

问题原因分析
  1. 设备的HTTP实现不规范,属于自定义类HTTP协议,并非严格遵循HTTP/1.0或1.1标准:
    • Postman作为标准HTTP客户端,对响应的协议版本解析要求严格,遇到非标准格式的响应头就会抛出「Parse Error: Expected HTTP/」错误,这不是Postman的Bug,是设备协议不符合规范导致的。
    • curl默认拒绝HTTP/0.9协议,所以首次调用报错;添加--http0.9参数后虽能兼容协议,但返回错误响应,说明请求格式和设备的预期不匹配。
  2. 请求格式与安卓APP存在差异:安卓APP能正常调用,说明它发送的请求完全匹配设备要求,而curl/Postman的默认请求(比如自动添加的请求头、换行符格式、请求体编码等)和APP的不一致,导致设备返回错误码rval=-4。
解决办法

1. 精准复刻安卓APP的请求内容

先抓包获取APP发送的原始请求完整内容(包括请求行、所有头、请求体、换行符):

  • 用Wireshark抓同一局域网内安卓设备和目标设备的通信包,过滤HTTP协议,找到对应请求的原始数据。
  • 或者在安卓设备上配置代理工具抓包,查看APP发送的请求细节。

对比curl/Postman的请求,修正差异点:

  • 移除自动添加的标准头:比如curl默认会加Host、User-Agent、Accept等头,如果APP没发送这些,用-H "Host:"(清空Host头)、-H "User-Agent:"等参数去掉,HTTP/0.9场景下也可以用--no-header。
  • 匹配请求体格式:确保JSON的空格、引号、参数值和APP完全一致,包括是否有换行。如果设备只认LF换行(Linux风格),可以把请求体写到文件里(用Notepad++切换为LF换行),再用curl --http0.9 --data @request.json http://<device-ip>:<port>发送。
  • 检查请求行:比如APP可能用的是POST /api HTTP/0.9而非标准的POST /api HTTP/1.1,curl用--http0.9后会自动用HTTP/0.9请求行,但要确认请求路径是否正确。

2. 用手动方式测试请求

用telnet或nc(Windows 11可通过微软商店安装netcat)直接发送原始请求,排除客户端自动处理的干扰:

# 用telnet示例
telnet 192.168.1.100 80
# 连接成功后手动输入(注意换行符用LF):
POST /your-api-path HTTP/0.9

{"msg_id":257, "param":...}
# 输入完后按两次回车发送

如果手动发送能得到正确响应,再把这个请求格式转换成curl命令即可。

3. 排查错误码rval=-4的具体含义

查看设备的官方文档,或对比APP的成功请求和curl的错误请求,rval=-4大概率是请求参数错误、缺少必要字段、或请求格式不符合设备要求(比如msg_id未正确设置)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:54:51