php 多个curl 很慢,PHP CURL POST 很慢?

使用PHP CURL发起一个POST请求,请求的本机某个端口(有PHP常驻进程监听那个端口),却发现速度慢得要死,经常需要1到2秒也就是1000多毫秒才能返回,要shi啊!代码如下:

$t1 = microtime(true);

$ch = curl_init($url);

curl_setopt_array($ch, [

CURLOPT_CONNECTTIMEOUT_MS => 200,

CURLOPT_TIMEOUT_MS => 1500,

CURLOPT_HEADER => false,

CURLOPT_SSL_VERIFYHOST => false,

CURLOPT_SSL_VERIFYPEER => false,

CURLOPT_RETURNTRANSFER => true,//不输出

CURLOPT_POST => true,

CURLOPT_POSTFIELDS => http_build_query($post),

]);

$result = curl_exec($ch);

if ($result === false)

{

return ['err' => curl_error($ch), 'data' => ''];

}

else

{

$result = json_decode($result, true);//返回的是json字符串

$result['curl_time_use'] = microtime(true) - $t1;

return ['err' => null, 'data' => $result];

}

这上边$post变量就一个简单的数组,请求的端口处理起来不会超过10毫秒(0.01s),这是一定的,居然总耗时会达到1000毫秒以上,根本没法玩耍。多次测试,发现$post某个值(字符串)只要超出某个长度就会这么慢,不超过还是很快的。实测,那个值使用strlen()不超过357是OK的,达到358就歇菜了!这是什么情况?PHP版本是5.4.16。

edbf14e3cdaae481d0ed88173eb586c7.png

一翻搜索,说加个什么header为”Expect:”就可以了(别人说的是没数据返回,我这还是有的,只是慢),跟着试了一下,添加以下header:

CURLOPT_HTTPHEADER => ['Expect:'],

果然OK了,长度超过357也正常了:

4ed6cc3a50d7af7955159c8880bef41a.png

这里边,肯定不是什么357的问题,这也不是一个什么特殊的数字。再仔细看文章,正确说法是:POST的数据(估计是原始数据)超过1024字节,CURL不是直接发起POST请求,而是分两步:

发送一个请求, 包含一个Expect:100-continue, 询问Server使用愿意接受数据

接收到Server返回的100-continue应答以后, 才把数据POST给Server

这样,当Server端不返回100-continue的时候,就出问题了。我这里PHP常驻进程使用的是Swoole或Workerman,可能有处理,CURL能成功但慢了很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值