你的 CURL 请求超时了吗?

栏目: 服务器 · 发布时间: 6年前

内容简介:背景:服务器上线了一个事件推送的功能。即主服务器系统产生的一些充值与下单的操作,会把这些动作消息推送给指定的活动服务器。我们采用的是 CURL 请求。但是,上线一段时间内发现消息吞吐很小,有时间还伴随请求超时。但是,在我们的线上出现了这样一个错误:通过了解,发现这是一个与 DNS 解析有误的错误。

背景:服务器上线了一个事件推送的功能。即主服务器系统产生的一些充值与下单的操作,会把这些动作消息推送给指定的活动服务器。我们采用的是 CURL 请求。但是,上线一段时间内发现消息吞吐很小,有时间还伴随请求超时。

一、一个再正常不过的 PHP CURL 代码示例:

<?php
$data = ['code' => 'buy', 'userid' => '123456', 'money' => 30000];

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, "http://www.xxx.com/event.php"); 
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$output = curl_exec($ch); 

echo $output;

curl_close($ch);

但是,在我们的线上出现了这样一个错误: name lookup timed out

通过了解,发现这是一个与 DNS 解析有误的错误。

DNS 解析时间耗时

curl -o /dev/null -s -w %{time_namelookup} www.baidu.com

二、DNS 与 IPV6 以及解决方案

因为,我们的服务器采用的是 CentOS 7。而默认情况下 CentOS 系统是开启了 IPV6 支持的。这就导致了 PHP 的 CURL 发起请求的时候,Linux 的 CURL 库会首先尝试 IPV6 网络去解析域名。但是,目前很多的 DNS 都不支持 IPV6。就导致了解析超慢或超时的情况。

既然,我们知道了是因为 DNS 不支持 IPV6 导致的问题。那么,要解决这个问题有必须做如下操作:

  • 换一个支持 IPV6 的 DNS
  • 关闭 Linux 系统的 IPV6
  • PHP 代码中强制使用 IPV4

(1) 换一个支持 IPV6 的 DNS

通过网络上的方案,是换成如下 DNS:

nameserver 114.114.114.114
nameserver 8.8.8.8

这个我没有试验过。我们采用的是关闭 Linux IPV6

(2) 关闭 Linux 系统的 IPV6

直接关闭 IPV6 是最容易的一件事情了。

编辑 /etc/sysctl.conf

# vim /etc/sysctl.conf

添加

IPv6 disabled

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

使其生效

# sysctl -p

(3) PHP 代码中强制使用 IPV4

在 PHP 5.3 版本开始才支持。

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

即使你的 PHP 大于 5.3 版本,也要保证 Linux 系统的 CURL 版本大于等于 7.10.8 版本。

当然,超时除了 DNS 超时,有可能你的系统代码也会超时。这就需要你自己去解决了。


以上所述就是小编给大家介绍的《你的 CURL 请求超时了吗?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

黑客大曝光

黑客大曝光

Joel Scambray、Vincent Liu、Caleb Sima / 姚军 / 机械工业出版社华章公司 / 2011-10 / 65.00元

在网络技术和电子商务飞速发展的今天,Web应用安全面临着前所未有的挑战。所有安全技术人员有必要掌握当今黑客们的武器和思维过程,保护Web应用免遭恶意攻击。本书由美国公认的安全专家和精神领袖打造,对上一版做了完全的更新,覆盖新的网络渗透方法和对策,介绍如何增强验证和授权、弥补Firefox和IE中的漏洞、加强对注入攻击的防御以及加固Web 2.0安全,还介绍了如何将安全技术整合在Web开发以及更广泛......一起来看看 《黑客大曝光》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具