Отправляю запрос на сервис по решению капч. Когда решение готово они посылают 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 не выполнился, т.е. истории выполнения или ошибок попросту нету, будто ничего не выполнялось. Как следствие зависание запросов из-за таких косяков.
Подскажите, в чем может быть проблема и как решить?