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