我有几个 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 效果很好。发生了什么以及如何解决?
1 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
这可能是因为 Curl 尝试反向 DNS 并且由于它失败只是等待超时,您可以像这样修复它:
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 )
- 1 回答
- 0 关注
- 223 浏览
添加回答
举报
0/150
提交
取消