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交易参数有误,该笔交易暂时无法完成,请联系商家解决

我要说说
网上宾友点评
沙发已空