robotframework请求一个参数超级长的接口出现的问题

场景:待测试的接口是一个保存任务的接口,里面的参数个数不多,但是其中有个参数非常复杂,就是列表字典的各种嵌套,总共传参长度至少一万个字符以上

2019-04-29 14:19:47.804 [http-nio-4018-exec-79] INFO  org.apache.coyote.http11.Http11Processor - Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Request header is too large
	at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:718)
	at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:462)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:684)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:800)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1471)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)

发送请求后,响应状态码为400,后台打印日志如上

what?request header is too large?我根本都没有设置请求头信息啊

于是乎,开始了漫长的排查之路,也就此发现了好多自己未深刻理解的问题

问题一:未清楚理解到post请求里面data传参和params传参

在使用RF发起post请求的时候,我统一的做法都是先建一个字典,把所有参数拼装好,然后传给params

我也不知道为什么要这样传...从来没搞清楚过data传参和params传参的区别,好像是这样传没有出过错,然后就一直这样传了...

嗯,只有ctrl到关键字上去看看关键字的介绍了,果然看到一点

params url parameters to append to the uri  怪说不得会报出 request header is too large

扫描二维码关注公众号,回复: 10743822 查看本文章

这里插个题外话,一发现报了这个错我就去百度了,然后查出来一堆

点进去就是让改tomcat的配置,我着急到真的都想去改tomcat的配置了...but,这次开发用的是springboot 内置的tomcat,我...

其实我想不通啊,为什么浏览器都可以正常请求调用,咋换到RF上就不行了呢,于是乎我把我的疑问问了我的老公(我也不知道为啥要问他,他一搞JAVA开发的,又不知道啥是RF),我老公再次给我强调你这是请求头超长了,我还跟他肯定得说我都没设置请求头...

好吧,请求头超长这个问题算是解决了,看来是我传参一直传错了,我应该用data传参而不是params传参?no,其实到现在我还没搞懂这两个该什么时候用什么。

既然找到请求头的办法了,那么就把参数传给data

这下请求响应码倒是200了,可是却报出了应用本身权限没check过的一个错

没道理,我参数应该都是正确的,我找不出问题在哪里,我尝试着加一个header试试

于是变成了

然后运行,成功

遗留下的问题

1、什么时候用data传参?什么时候用params传参?

2、为什么没加headers,我用params传参都成功了(除了上面这个说头信息过长的),用data传参却异常了(给人的感觉是请求成功了,但是参数传得不对,所以导致后端check没过)?

3、如果data是字典,params是json串,那么为什么我给params传参用的字典也成功了?

发布了33 篇原创文章 · 获赞 2 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/sun_977759/article/details/89673912
今日推荐