Задать вопрос
@aopil

Почему не выполняется запрос?

Отправляю запрос на сервис по решению капч. Когда решение готово они посылают POST запрос на указанный url адрес. Я должен принять POST запрос и использовать ответ-решение которое дал мне сервис, на сайте, где мне требуется пройти капчу.

Вот так выглядит прием POST запроса:
public function CallBack()
    {
        if (isset($_POST)) {
            if (isset($_POST["id"]) && $_POST["code"] != "ERROR_CAPTCHA_UNSOLVABLE") {
                // ТУТ ВЫЗЫВАЕМ ФУНКЦИЮ КОТОРАЯ ДЕЛАЕТ CURL ЗАПРОС НА НУЖНОМ САЙТЕ.
                $this->CurlRequest($_POST["id"], $_POST["code"]);
            }
            file_put_contents(__DIR__ . '/logs/callbackHistory.txt', json_encode($_POST) . PHP_EOL, FILE_APPEND);
        }
    }


Вот функция CurlRequest:
public function Request($requestId, $captchaCode)
    {
        include_once("function.php");
        $function = new Functions();

        $order = $function->GetDetailsByRequestId($requestId);

        if (!empty($order)) {
            $cookiefile = 'cookie.txt';
          
            $ch = curl_init();
            curl_setopt_array($ch, array(
                CURLOPT_URL            => $url,
                CURLOPT_POSTFIELDS     => $param,
                CURLOPT_POST           => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_TIMEOUT        => 60,
                CURLOPT_CONNECTTIMEOUT => 30,
                // Proxy here
                CURLOPT_COOKIEFILE     => $cookiefile,
                CURLOPT_COOKIEJAR      => $cookiefile,
                CURLOPT_ENCODING       => 'gzip, deflate'
            ));

            $headers = array();
            $headers[] = 'Connection: keep-alive';
            // Other headers here...
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

            $result = curl_exec($ch);
            $info = curl_getinfo($ch);

            if (curl_errno($ch)) {
                file_put_contents(__DIR__ . '/logs/error.txt', 'curl_errno - ' . curl_error($ch) . PHP_EOL, FILE_APPEND);
            }

            curl_close($ch);
            unlink($cookiefile);

            file_put_contents(__DIR__ . '/logs/history.txt', date('Y-m-d h:i:s') . ' - CodeId: ' . $order["Id"] . ' Result: ' . $result . PHP_EOL, FILE_APPEND);

            if ($info["http_code"] == 200) {
            	// запись в базу итд..
            }
        }
    }


Проблема: В callbackHistory.txt я вижу, что callback пришел, далее, в функции CurlRequest у меня также стоит запись логов в файл, чтобы просматривать историю запросов и результаты на них, и вот тут проблема. Иногда, по непонятным причинам, в callbackHistory.txt пришел результат по запросу, а curlRequest не выполнился, т.е. истории выполнения или ошибок попросту нету, будто ничего не выполнялось. Как следствие зависание запросов из-за таких косяков.

Подскажите, в чем может быть проблема и как решить?
  • Вопрос задан
  • 82 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
dcc
@dcc
junior
Иногда, по непонятным причинам

Причина очень понятно, у вас же логика такая. В файл пишется есл что то пришло постом, не зависимо от результата .
Ну а почему курл реквест не выполняется, надо смотреть. Я бы прям построчно возвращал каждый метод для поиска ошибок.
А истории ошибок у вас опять же нет, так как вы сами так сказали делать в логике, ведь ошибки должен поидее возвращать курл рекквест, а он тупо игнорируется по вашим условиям судя по константе в условиях
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы