猿问

为什么对 Telegram Bot API 的 cURL 请求突然变得很慢?

我有几个 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);

几天前,我注意到:

  1. file_get_contents()停止工作,failed to open stream: Connection timed out每次都完全返回,但它可以很好地处理对其他网站的请求;

  2. cURL 继续工作,但速度很慢:在我向机器人发送消息后,我等待 5-8 秒才能收到答复;当我改变CURLOPT_CONNECTTIMEOUT1等待期间减小到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 效果很好。


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


慕的地10843
浏览 224回答 1
1回答

一只萌萌小番薯

这可能是因为 Curl 尝试反向 DNS 并且由于它失败只是等待超时,您可以像这样修复它:curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 )
随时随地看视频慕课网APP
我要回答