关于用postman调用接口成功但是使用Java代码调用却失败的问题

关于用postman调用接口成功但是使用Java代码调用却失败的问题

最近项目需要用代码调用别的应用的一个接口,用的是http请求,规则是我们这边用一个自定义的字符串+时间戳(秒)用AES加密,将加密后的密文当作一个参数传给对方

bash 复制代码
String 密文= AES(字符串+时间戳)
然后API就是:
http://xxxx?check=密文

如:http://aabas/aad?check=E36CF0A82D0BE2F678813042B05F39D4E9244F054B514D6F5A3910B470C65045368FCB2C0DEEA905D22B3CB7D3DCDFE5

然后对方就会根据这个密文来解析是否是对应的字符串,之后就可以访问到他们的数据了。

遇到的问题,发布到服务器后对方的服务器会提示时间参数错误,习惯性的思维,我们会将URL和参数放到postman里测试一遍,结果发现同样的参数在postman可以调通,服务器里请求就是不行。

然后跟对方开发人员沟通,发现他们的判断逻辑是这样的,终于找到的问题的所在。

csharp 复制代码
if ((DateTime.Now <= dateTime || dateTime <= DateTime.Now.AddMinutes(-20)))
                {
                    context.Response.Write("参数时间有误!);
                    return;
                }

datetime就是我们传过去的时间戳。这样的判断在服务器只要网络是正常的是怎么也过不了的,我们传过去的也是当前的时间,网络服务中几乎没有一秒的时间差的,然后我们通过日志把请求的参数拿到postman里去调用,时间自然比他们系统的时间要早,所以postman调用,服务器代码调用不行。

最后协商他们需要把前面判断的等号去掉,且系统的时间可能存在误差,于是判定的时间向后推迟了一秒,我们传过去的时间只需要小于当前时间往后加一分钟就可以了

判断代码改成

csharp 复制代码
if ((DateTime.Now.AddMinutes(1) < dateTime || dateTime <= DateTime.Now.AddMinutes(-20)))
                {
                    context.Response.Write("参数时间有误!);
                    return;
                }

至此,问题解决。

总结:

判断时间的比较需要注意,且postman能调通代码不行也不代表对方的接口没问题,不要自我怀疑。

相关推荐
笑衬人心。1 分钟前
JVM 笔记:类加载、内存管理、垃圾收集与垃圾收集器
java·jvm·笔记
程序猿小D4 分钟前
Java项目:基于SSM框架实现的进销存管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】
java·数据库·mysql·ssm·jsp·毕业论文·进销存管理系统
得物技术10 分钟前
Java volatile 关键字到底是什么|得物技术
java·后端
HoHeHa12 分钟前
IDEA 手动下载安装数据库驱动,IDEA无法下载数据库驱动问题解决方案,IDEA无法连接数据库解决方案(通用,Oracle为例)
java·数据库·intellij-idea
你可以叫我仔哥呀17 分钟前
Java程序员学从0学AI(七)
java·开发语言·人工智能·ai·spring ai
杨DaB36 分钟前
【SpringMVC】MVC中Controller的配置 、RestFul的使用、页面重定向和转发
java·笔记·后端·学习·spring·mvc·restful
linyb极客之路39 分钟前
干货来袭!5 分钟学会快速实现责任链,效率直接拉满!
java
创码小奇客43 分钟前
保姆级 Talos 超参数优化实战指南:从入门到封神
java·后端·架构
青云交1 小时前
Java 大视界 -- Java 大数据在智能安防入侵检测系统中的多源数据融合与误报率降低策略(369)
java·大数据·入侵检测·智能安防·多源数据融合·误报率降低·视频语义理解
我会冲击波1 小时前
告别手写注释!变量命名、注释IDEA插件更新了,AI帮你搞定一切代码注释
java·intellij idea