curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));cURL问题经常出现在swoole使用上面, 引用韩天峰Rango的文档:
CURL在发送较大的POST请求时会先发一个100-continue的请求,如果收到服务器的回应才会发送实际的POST数据。
而swoole_http_server不支持100-continue,就会导致CURL请求超时。
解决办法是关闭CURL的100-continue
在这里, 贴个curl的公共方法, 感兴趣的小伙伴可以拿走
/**
* 发送curl请求
* @access public
* @param string $url 目标地址
* @param array $option 用户浏览器头、http请求头
* @param array|null $post post数组
* @return bool|string
*/
function curl($url, $option = [], $post = null)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if (isset($option['header'])) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $option['header']); // 发送自定义header
} else {
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); // 屏蔽100-continue
}
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_USERAGENT, isset($option['ua']) ? $option['ua'] : '');
curl_setopt($ch, CURLOPT_REFERER, '');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
if (!is_null($post)) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$r = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $r;
}swoole使用问题, 请在大佬的group.swoole.com或segment fault swoole专区进行提问。
安利PHP-JS前端自学群2702237