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