必威体育Betway必威体育官网
当前位置:首页 > IT技术

http400错误经历

时间:2019-08-16 11:12:13来源:IT技术作者:seo实验室小编阅读:63次「手机版」
 

http 400

一、先引用一下别的处理方案

HttpGet/Post请求带有特殊字符,400 Bad request解决方案

今天做项目的时候,需要向服务器接口 传递 json参数,使用 apache 的 httpclient,当时没有对参数做特殊处理直接提交了,结果运行时报错了,如下:

http 400 Bad Request

后来在网上查资料找到原因了:HttpGet或 HttpPost都不能传包含 ” 、“{“、”}”这样的参数,需要对特殊字符进行转义,把 ” 转成%22,把 { 转成%7b,把 } 转成%7d

  1.    String url = "http://127.0.0.1:9000/signal/Resource?param={\"name\":\"service1\",\"param\":{\"id\":\"1\"}}";
  2.    url = url.replace("\"", "%22").replace("{", "%7b").replace("}", "%7d");      

注意:参数里面如果有 空格的话,也需要转义,否则会有问题。

二、使用火狐程序员调试工具试了一下,确实有作用了。

本地原来post方法的url:http://url?gridConditions={},返回http400 bad request

修改为

http://url?gridConditions=%7B%7D ,正常 返回200

三、但是其他同事机器运行的程序没有问题

四、从本地继续测试,跟踪tomcat console后台

发现后台报错:

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

   at org.apache.coyote.http11.InternalInputBuffer.parserequestLine(InternalInputBuffer.java:189)

   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1000)

   at org.apache.coyote.AbstractProtocol$AbstractConnectionhandler.process(AbstractProtocol.java:637)

   at org.apache.tomcat.util.net.JIoEndpoint$socketProcessor.run(JIoEndpoint.java:318)

   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

   at org.apache.tomcat.util.threads.TaskThread$WrAPPingRunnable.run(TaskThread.java:61)

   at java.lang.Thread.run(Thread.java:745)

五、直接百度

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

找到一篇文章

https://www.cnblogs.com/fxl-njfu/p/7485179.html

Tomcat换一个低一点的版本可以!这是因为高一点的Tomcat版本对URL有更严格的要求,当你的URL中包含了超出RFC 7230和RFC 3968所定义的字符时,就会报错。

本地使用的是tomcat7.0.73,正常运行的使用的是toamcat7.0.47

回测后,页面返回正常。

相关阅读

分享到:

栏目导航

推荐阅读

热门阅读