CURL发送POST请求服务器端超时
最后更新于:2022-04-02 06:34:05
# CURL发送POST请求服务器端超时
[TOC]
`CURL`在发送较大的`POST`请求时会先发一个`100-continue`的请求,如果收到服务器的回应才会发送实际的`POST`数据。而`swoole_http_server`不支持`100-continue`,就会导致CURL请求超时。
解决办法是关闭`CURL`的`100-continue`
~~~
// 创建一个新cURL资源
$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1:9501");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1); //设置为POST方式
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ch, CURLOPT_POSTFIELDS, array('test' => str_repeat('a', 800000)));//POST数据
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
~~~
## 其他客户端
如果客户端是其他语言编写的,无法修改客户端去掉100-continue,那么还有2个方案可以解决此问题。
* 使用Nginx做前端代理,由Nginx处理100-Continue
* 重新编译Swoole启用100-Continue的支持,需要手工修改swoole\_config.h,找到SW\_HTTP\_100\_CONTINUE,去掉注释,执行make clean && make install
> 启用100-CONTINUE后会额外消耗服务器的CPU资源
';