php - 为什么对 Telegram Bot API 的 cURL 请求突然变得非常慢?

标签 php curl telegram-bot centos6 php-7.0

我有几个 Telegram 机器人,多年来一直运行良好;我使用了两种方法向 Bot API 发送请求:

第一个是:

file_get_contents($url);

第二个是:

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10,
    CURLOPT_TIMEOUT => 60
]);
curl_exec($ch);

几天前我注意到:

  1. file_get_contents() 完全停止工作,每次都会返回无法打开流:连接超时,但它可以很好地处理对其他网站的请求;
  2. cURL 继续工作,但速度非常慢:向机器人发送消息后,我等待 5-8 秒才能收到答复;当我将 CURLOPT_CONNECTTIMEOUT 更改为 1 时,等待时间减少到 1 秒左右。

file_get_contents() 已开始像以前一样使用此 context 工作:

file_get_contents($url, false, stream_context_create([
    'socket' => [
        'bindto' => '0:0'
    ]
]));

last_error_message 始终为读取超时已过期。服务器重启没有帮助。从浏览器直接请求 Bot API 效果非常好。

发生了什么以及如何解决它?

最佳答案

这可能是因为 Curl 尝试反向 DNS,并且由于它失败了,所以只是等待超时,您可以像这样修复它:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4)

关于php - 为什么对 Telegram Bot API 的 cURL 请求突然变得非常慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57520884/

相关文章:

php - Magento 以编程方式添加产品图片

php - MySQL 搜索优化以获得更好的性能

php - row_array() codeigniter 只返回第一行

curl - 'curl' 默认使用什么证书?

c# - 使用 Telegram bot API 从群组或 channel 接收消息

php - 尝试使用 PHP 创建动态生成的 mySQL select 语句

php - 使用 CURL 将 JSON 数据发布到 API

curl - 如何使用cURL单击链接?

javascript - Telegram Bot 通过 node.js 发送照片

api - 如何在 Telegram 中获取电话号码的user_id