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