使用curl命令发送较长的请求参数(突破请求长度限制)

问题表现

在 dev/pre 上通过curl命令来模拟hsf_http请求时,遇到一个问题,请求发出之后直接报下面的错误:

curl: (52) Empty reply from server

通过Google之后发现问题的本质是curl发送的请求报文超过1024以上字节时的HTTP/1.1特性,curl客户端直接放弃发起请求。

HTTP/1.1 协议里设计 100 (Continue) HTTP 状态码的的目的是,在客户端发送 Request Message 之前,HTTP/1.1 协议允许客户端先判定服务器是否愿意接受客户端发来的消息主体(基于 Request Headers)。即, Client 和 Server 在 Post (较大)数据之前,允许双方“握手”,如果匹配上了,Client 才开始发送(较大)数据。
这么做的原因是,如果客户端直接发送请求数据,但是服务器又将该请求拒绝的话,这种行为将带来很大的资源开销。

协议对 HTTP/1.1 clients 的要求:
如果 client 预期等待“100-continue”的应答,那么它发的请求必须包含一个 Expect: 100-continue  的头域!
 

解决方案

  1. 我们将参数存放到文本文件中
# 参数存放到文件中
$ cat >aa.txt 

  1. 发起Http请求(指定参数文件和header)
$ curl --header 'Expect:' -d@aa.txt http://192.168.101.7:52433/com.xxx.api.LoanApplyService:1.0.0/loanApply
# --header 'Expect:'会去掉curl对参数长度1024的限制
# -d@aa.txt  指定使用aa.txt中的内容作为参数

curl脚本格式化之后如下

curl -X POST --header 'Expect:' -d@aa.txt http://192.168.101.7:52433/com.xxx.api.LoanApplyService:1.0.0/loanApply

Comments
Write a Comment
  • Just Do It reply

    666,学习了

    • Just Do It reply

      @Just Do It,

  • Just Do It reply

    hahha

    • @Just Do It, ^_^ 欢迎测试评论