PHP

swoole屏蔽curl的100 continue方法

字號+ 編輯: 国内TP粉 修訂: 种花家 來源: 原创 2024-03-30 我要說兩句(0)

在curl請求當中插入一句話的事。

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

閲完此文,您的感想如何?
  • 有用

    2

  • 沒用

    1

  • 開心

    2

  • 憤怒

    1

  • 可憐

    1

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: PHP+JS聊天群

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • PHP的換行符是什麽

  • 由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯系商家解決

我要說說
網上賓友點評