请求头设置没有生效

说明:记录一次使用kong.unirest发起http请求,添加请求头的坑。

场景

发起一个http请求,需要带上签名等请求头,如下:

java 复制代码
	@Override
	protected String run() {
	   String dataString = JSON.toJSONString(data);
	   String signature = 加密工具,生成签名(signPrivateKey, dataString);
	   // 将签名放到请求头中
	   Unirest.config().getDefaultHeaders().add("sign", sign);
	   HttpResponse<String> response = Unirest.post(url.toString())
	           .queryString("type", type)
	           .contentType(ContentType.APPLICATION_JSON.toString())
	           .body(dataString)
	           .asString();
	
	   if (response.isSuccess()) {
	       return "调用成功";
	   }
	
	   throw new Exception("调用失败");
	}

我使用 Unirest.config().getDefaultHeaders().add("sign", sign); 的方式,将数据加到请求头上的。然后在调试时,发现首次通过验证后,后面取签名验证,都验证不通过,很疑惑。

解决

增加打印日志后,发现除了首次,后面传递过去的签名请求头 sign 都是首次的数据。而看我上面的代码,是需要根据每次的数据内容,产生签名,然后加到请求头上。就是说,后面产生的sign,没有覆盖上一次请求的sign

不能用上面这种方式,要用下面这种:

java 复制代码
	@Override
	protected String run() {
	    String dataString = JSON.toJSONString(data);
	    String signature = 加密工具,生成签名(signPrivateKey, dataString);
	    HttpResponse<String> response = Unirest.post(url.toString())
	            .queryString("type", type)
	            .contentType(ContentType.APPLICATION_JSON.toString())
	        	.header("sign", sign)
	            .body(dataString)
	            .asString();
	
	    if (response.isSuccess()) {
	        return "调用成功";
	    }
	
	    throw new Exception("调用失败");
	}

添加请求头,要放到Unirest.post发起调用时

首次发布

hezhongying.blog.csdn.net/article/det...

相关推荐
weixin_383196473 分钟前
java基础面试题@Autowired和@Resource区别
java·开发语言
evans在进步6 分钟前
LeetCode 33:搜索旋转排序数组——Java 两阶段二分查找详解
java·python·leetcode
Web Security Loop42 分钟前
MAC卸载JDK环境
java·macos·jdk
nnerddboy2 小时前
Rust教程04:引用、借用与切片
开发语言·后端·rust
Rain的Java大神之路2 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
counting money2 小时前
Tomcat 专题:从基础架构到性能调优与 WebSocket 实战
java·websocket·tomcat
xiaohaiAIgeo3 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
weixin_431600443 小时前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
小强库计算机毕业设计3 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
霸道流氓气质3 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式