为什么对 Telegram Bot API 的 cURL 请求突然变得很慢?
Why cURL requests to Telegram Bot API suddenly became very slow?
我有几个 Telegram 机器人多年来一直运行良好;我使用了 2 种方式向 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);
几天前我注意到:
file_get_contents()
完全停止工作,每次都返回 failed to open stream: Connection timed out
,但它可以很好地处理对其他网站的请求;
- 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
总是 Read timeout expired
。服务器重新启动没有帮助。从浏览器直接向 Bot API 请求完美无缺。
发生了什么以及如何解决它?
这可能是因为 Curl 尝试反向 DNS 并且因为它只是等待超时而失败,您可以这样修复它:
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 )
我有几个 Telegram 机器人多年来一直运行良好;我使用了 2 种方式向 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);
几天前我注意到:
file_get_contents()
完全停止工作,每次都返回failed to open stream: Connection timed out
,但它可以很好地处理对其他网站的请求;- 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
总是 Read timeout expired
。服务器重新启动没有帮助。从浏览器直接向 Bot API 请求完美无缺。
发生了什么以及如何解决它?
这可能是因为 Curl 尝试反向 DNS 并且因为它只是等待超时而失败,您可以这样修复它:
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 )