curl не возвращает ответ или http-код через несколько раз - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу отправить много запросов на сайт и найти идентификатор последнего существующего сообщения. Поскольку мой хост достигает предела количества запросов к этим веб-сайтам после нескольких запросов, я ожидаю, что запрос curl вернет ошибку, чтобы я мог сохранить идентификатор последнего сообщения в своей базе данных и продолжить прокрутку позже. Но после примерно 200 успешных запросов curl не возвращает ни ответа, ни http-кода. Для уточнения c Я хочу получать сообщения канала телеграммы от идентификатора до конца. Вот функция, которую я написал для этой цели:

function get_post_html_content($channel_username, $message_id){

  try {

    error_log($message_id."\n");

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 
      "https://t.me/".$channel_username."/".$message_id."?embed=1");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);

    $headers = array();
    $headers[] = 'Pragma: no-cache';
    $headers[] = 'Sec-Fetch-Site: same-origin';
    $headers[] = 'Origin: https://t.me';
    $headers[] = 'Accept-Encoding: gzip,deflate';
    $headers[] = 'Accept-Language: en-US,en;q=0.9';
    $headers[] = 'Sec-Fetch-Mode: cors';
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
    $headers[] = 'Accept: */*';
    $headers[] = 'Cache-Control: no-cache';
    $headers[] = 'Referrer Policy: no-referrer-when-downgrade';
    $headers[] = 'Connection: keep-alive';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $content = curl_exec($ch);

    if (!$content) {
      $errno = curl_errno($ch);
      $error = curl_error($ch);
      error_log("Curl returned error $errno: $error\n");
      curl_close($ch);
      return false;
     }
  $http_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE));

  error_log("http code: ".$http_code."\n");

  } catch (Exception $e) {
    error_log($e->getMessage());
  }

  $content = gzdecode($content);

  curl_close($ch);

  return $content;
}

Проблема заключается в том, что через несколько раз http-код 200 печатается в файле журнала ошибок, и эта функция возвращает содержимое. Внезапно он не печатает ничего http код в журнале ошибок и даже не возвращает false, чтобы я мог сохранить последний пост ID в базе данных. Так как же мне изменить эту функцию, чтобы она возвращала ложь в этой ситуации?

...