php使用curl请求体过大问题

今天在用Curl使用POST方法请求接口时,如果请求体过大,那么会返回不了数据。因为请求路径是先走代理,然后由代理转发到接口服务器,开始怀疑是代理那层做了限制,防止数据过大。随后改成直接请求接口,不走代理,数据马上有返回了,证明在代理层有问题。于是查看什么原因导致代理层会出这个问题

查看日志,发现HTTP的CODE返回100然后在网上搜到,原来CURL在做POST的时候,当数据大于1024字节的时候,它不会直接发POST请求,它需要先发送一个Expect:100-continue的头部,服务
端同意后,才把数据POST到服务端,这是libcurl的行为;

RFC协议: http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3

解决方法就是加上header

  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

另外,我把网上看到好像把http的版本指定为1.1也行,我没有试过

问题是解决了,但有点不太明白,为什么直接请求接口服务器不加上面的header可以
通过代理后,不加就不行了。同样是curl请求呢?难道是代理写的问题吗?代理是用
swoole写的http server做的中转.又或者是因为http的版本问题,具体就不得而知了。

posted @ 2018-08-17 13:16  随彦心MO  阅读(1403)  评论(0)    收藏  举报