3

何年もうまく機能している Telegram ボットがいくつかあります。Bot API にリクエストを送信するには、次の 2 つの方法を使用しました。

1 つ目は次のとおりです。

file_get_contents($url);

2 つ目は次のとおりです。

$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 秒待ちます。1秒程度に短縮された待機時間に変更CURLOPT_CONNECTTIMEOUTしたとき。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 への直接要求は完全に機能します。

何が起こっていて、それを修正する方法は?

4

1 に答える 1