При запросе вывода данных через cURL работает только при обновлении страницы?

Ссылка скопирована
PHP
1 ответ

Добрый день, впервые столкнулся с этим. Код на php с авторизацией для подключения к стороннему API. Вывожу данные которые получаю и тут на тебе. При загрузке страницы ничего не выводиться, но если несколько раз обновить страницу то всё выводит без проблем. Кто с таким сталкивался и как это лечить? Пример реализации ниже. Может есть соображения на этот счёт?

$ch = curl_init('УРЛ САЙТА КОТОРЫЙ ОТДАЁТ API'); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth КОД АВТОРИЗАЦИИ', 'Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); echo $html

$ch = curl_init('УРЛ САЙТА КОТОРЫЙ ОТДАЁТ API'); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: OAuth КОД АВТОРИЗАЦИИ', 'Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $html = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); echo $html

Дополнительно:

Сталкивались все. Ситуация, когда что-то не работает, является совершенно банальной.
Соображения очень простые. Рассказываем специально для тестеров:
Если код не выводит то что должен, это значит, что он не работает.
Если код не работает, это значит что скорее всего происходит какая-то ошибка.
Чтобы узнать, как лечить, надо прочитать сообщение об ошибке.
Чтобы прочитать сообщение, надо загуглить PHP curl как получить сообщение об ошибке

  • Ипатьев,

    , но если несколько раз обновить страницу то всё выводит без проблем

  • Антон Шаманов, и к чему эта глубокомысленная цитата? Развейте свою мысль. Если она есть.
  • Ипатьев, хрень ты полнейшую несешь с умным видом
  • Ипатьев, он имел ввиду что сам запрос обрабатывается, добавил строку для вывода ошибок но к сожалению ничего не показывается, буду копать дальше.. Всё равно при обновлении всё срабатывает.
  • Костя Тестер, ну где он обрабатывается, если ничего не выводит? Хотя бы минимальная логика в рассуждениях должна быть? Скажем, из четырех запросов у вас три не дали нужного результата. Чтобы понять, что делать, надо понять, что именно не так с этими тремя. Разве это не логично?
  • Ипатьев, Я понимаю, но я дописал строчку кода и по идее должно хоть что то показать в ошибке, но к сожалению не показывает. Буду смотреть в сторону ответа сервера, что то мне подсказывает что там будет проблема.
    $html = curl_exec($ch); 	if ($html === false) { 		// Выведем ошибку: 		echo curl_error($html); 	} else { 		// Выведем результат: $jsonArray = json_decode($html); 	} $info = curl_getinfo($ch); curl_close($ch);

    $html = curl_exec($ch); if ($html === false) { // Выведем ошибку: echo curl_error($html); } else { // Выведем результат: $jsonArray = json_decode($html); } $info = curl_getinfo($ch); curl_close($ch);

  • а $info что выводит?
    и что конкретно лежит в $html?
    и что это за глупость, if ($html === false) echo curl_error($html);? что вы хотите получить от curl_error(false)?
  • Ответы:

    если сервера этого сервиса так хреново работают, то просто учти это в коде и повторяй запрос пока сервис не сможет отдать результат

    • строчку кода подскажите как реализовать?
    • запихни свой код в функцию и вызывай её в цикле пока она не вернет результат, только добавь еще CURLOPT_CONNECTTIMEOUT и CURLOPT_TIMEOUT
    • Костя Тестер, ну и советую переходить на https://docs.guzzlephp.org/en/stable/ или подобные библиотеки чтобы избавиться от рутины
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Анна SEO Ответ

    Для того чтобы понять, почему вывод данных через cURL работает только при обновлении страницы, нужно проанализировать код и понять, в чем может быть причина такого поведения. Возможно, проблема связана с тем, что запрос через cURL выполняется только при загрузке страницы, и не обновляется динамически.

    Одним из способов решения этой проблемы может быть использование AJAX запросов для обновления данных на странице без необходимости перезагрузки страницы.

    Вот пример кода на PHP с использованием AJAX для получения данных через cURL:

    // PHP код для выполнения запроса через cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/data');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
     
    // Вывод данных на страницу
    echo '<div id="data"></div>';
     
    // JavaScript код для отправки AJAX запроса и обновления данных на странице
     
        // Функция для отправки AJAX запроса
        function fetchData() {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', 'http://example.com/api/data', true);
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4 &amp;&amp; xhr.status === 200) {
                    document.getElementById('data').innerHTML = xhr.responseText;
                }
            };
            xhr.send();
        }
     
        // Вызов функции fetchData при загрузке страницы
        window.onload = fetchData;

    // PHP код для выполнения запроса через cURL $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/data'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); // Вывод данных на страницу echo '<div id="data"></div>'; // JavaScript код для отправки AJAX запроса и обновления данных на странице // Функция для отправки AJAX запроса function fetchData() { var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://example.com/api/data', true); xhr.onreadystatechange = function() { if (xhr.readyState === 4 &amp;&amp; xhr.status === 200) { document.getElementById('data').innerHTML = xhr.responseText; } }; xhr.send(); } // Вызов функции fetchData при загрузке страницы window.onload = fetchData;

    Этот код отправляет AJAX запрос на сервер при загрузке страницы и обновляет данные на странице без необходимости перезагрузки.

    Таким образом, использование AJAX вместе с cURL может помочь решить проблему, когда вывод данных через cURL работает только при обновлении страницы. Не забудьте также проверить, что сервер правильно обрабатывает AJAX запросы и возвращает корректные данные.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно