java发送get请求_于一次简单的get请求得知tomcat的一个小坑

一、前言

在接到需求后很快的做完了然后做本地测试发现:

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

因为是get请求里面参数数据是查询人名所以携带中文,对此进行了问题分析。

二、分析过程

在当时我就立马咨询了百度老师,是因为Tomcat在某个版本里面升级了,对URL遵守RFC规范,对特殊字符不予以放行。

要解决问题有两个方向:

1.解决编码问题。

2.Tomcat降版本。

使用postman携带中文参数可以正常访问到数据,之前也没有遇到过这样的问题,因此java服务端是没问题的,而且服务是使用springboot 1.5.3 ,对应的Tomcat版本是8.5.14,不考虑打成war包部署就打算从编码入手了。

其实问题说起来还是挺简单的。。但是因为服务设计的框架所以走错了路子。。。想记录一下分析的过程。

从前端那里携带中文参数访问Tomcat,在Tomcat的访问日志里,看到了携带中文参数的请求是这样的:

[18/Jun/2019:19:51:18 +0800] 0:0:0:0:0:0:0:1 "GET null null" 400 (0 ms)

请求都没进来就被过滤掉了。

我在js里面对参数进行了编码

window.location.href='?p=ware&d=ware-register-query&agentName='+encodeURI($(".agent").val());

在这里对参数进行了编码 ,发现并没有用。百思不得其解。

其实因为我们是 html+php+java架构的,请求是经过php处理后再发送到java后台的,在js中编码过的参数,发送到php处理的时候,会自动解码:

var_dump(check_merchant_query.'?agentName='.$_GET['agentName']); // 打印拼接的url
$req = new httpRequest('get',check_merchant_query.'?agentName='.$_GET['agentName'],null,function($result){return $result;});

这里打印出来的结果是已经解码过的,当时没注意到,只是觉得这个url没错,因此多花了许多时间。。

以为在PHP里面构造的http请求的get参数是已经编码过的,所以我将接下来的时间都放在了如何设置tomcat对特殊字符放行上。。

如果是正常的html+java,那么上面的编码就是没问题的,只是分析的时候忘记了还要经过php处理。。

最后在Php中对参数进行编码就可以啦

$req = new httpRequest('get',check_merchant_query.'?agentName='.urlencode($_GET['agentName']),null,function($result){return $result;});

至于postman为什么能够输入中文参数就能够直接访问tomcat呢?是因为postman就相当于一个浏览器,在发送请求的时候已经对参数进行了编码操作啦

原文 https://segmentfault.com/a/1190000019528182

b5ec7141938b05ef1b66b11f8acaaaf5.png

目前100000+人已关注加入我们

6e847399e6470b72971b103861856c6b.gif 872499bee6fbd61f1403886a6ae6ae2f.gif c199d5fb9711dd6e2f8d2dbb8e9ea087.gif fbdc2735b159d0fda7c54e4efbd2a20c.gif 564fecab17faeccd00ab1b0622cb907a.gif 5a9350f3a621931327dbc5ddd3ebc69b.gif a52627e102c72a0bc53ded8299f546dc.gif c12f41b2d238545e619e59b47cafbf4e.gif

864d9e17e88e4a920732e9b892a1b8ba.gif 838f84a9c5a602b284a52ad430d70ed8.gif 7637ea3068a3362f02a383adb4fdf349.gif e3819fe852a8ab63993ab1f33164c86b.gif cc43ef2522b49d71d9112464f26e627c.gif dd564d874c4f0d58ecc39e31524950dd.gif bd2ec763fcb3b382cf1366d2ae418607.gif 564fecab17faeccd00ab1b0622cb907a.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值