Ошибка recaptcha; Примечание: file_get_contents (): Content-type не указан, если application / x-www-form-urlencoded в

Я использую recaptcha 2 и получаю эту странную ошибку: Примечание: file_get_contents (): Content-type не указан, если application / x-www-form-urlencoded in ... в строке 38.

код:

<script src='https://www.google.com/recaptcha/api.js'></script>
    </head>

<body>
<?php 
$page = "contact";
include("includes/navbar.php"); 
echo '<div id = "wrapper">';
  $response = $_POST["g-recaptcha-response"];
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
        'secret' => '6LfJnWQUAAAAANMRQApsnetVjggDqnn4hx7Ltbyz',
        'response' => $_POST["g-recaptcha-response"]
    );
    $options = array(
        'http' => array (
            'method' => 'POST',
            'content' => http_build_query($data)
        )
    );
    $context  = stream_context_create($options);
    $verify = file_get_contents($url, false, $context);
    $captcha_success=json_decode($verify);
    if ($captcha_success->success==false) {
        echo "<h1>You did not prove you are human.</h1><h2> Please go back and complete the form!</h2>";
        exit();
    } 
    else if ($captcha_success->success==true) {
more code here to execute if captcha successfull

строка 38, которая вызывает сообщение об ошибке:

$verify = file_get_contents($url, false, $context);

Сообщение об ошибке появляется независимо от того, отмечен ли флажок робота. Если флажок не установлен, появляется сообщение «Вы не доказали, что вы человек», а если флажок робота отмечен, код обрабатывается правильно, хотя сообщение об ошибке все равно появляется.

Как удалить сообщение об ошибке? На сайте есть SSL-сертификат, поэтому я попытался изменить:

$options = array(
            'http' => array (
                'method' => 'POST',
                'content' => http_build_query($data)
            )
        );

к:

$options = array(
            'https' => array (
                'method' => 'POST',
                'content' => http_build_query($data)
            )
        );

и это удаляет сообщение об ошибке, но затем появляется сообщение «Вы не доказали, что вы человек», даже если флажок робота установлен.

Я в тупике.

С Уважением

Tog

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
2 026
2

Ответы 2

Я думаю, что в ваших опциях отсутствует параметр, попробуйте что-то вроде этого:

$options = array(
    'http' => array (
                'method' => 'POST',
                'content' => http_build_query($data),
                'header' => 'Content-Type: application/x-www-form-urlencoded'
            )
        );

Да, я исправил это с помощью:

<script src='https://www.google.com/recaptcha/api.js'></script>
    </head>
<body>
<?php 
$page = "contact";
include("includes/navbar.php"); 
echo '<div id = "wrapper">';
  $response = $_POST["g-recaptcha-response"];
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
        'secret' => '6LfJnWQUAAAAANMRQApsnetVjggDqnn4hx7Ltbyz',
        'response' => $_POST["g-recaptcha-response"]
    );
    $query = http_build_query($data);
    $options = array(
        'http' => array (
            'header' => "Content-Type: application/x-www-form-urlencoded\r\n", 
            "Content-Length: ".strlen($query)."\r\n".
            "User-Agent:MyAgent/1.0\r\n",
            'method' => 'POST',
            'content' => $query
        )
    );
    $context  = stream_context_create($options);
    $verify = file_get_contents($url, false, $context);
    $captcha_success=json_decode($verify);
    if ($captcha_success->success==false) {
        echo "<h1>You did not prove you are human.</h1><h2> Please go back and complete the form!</h2>";
        exit();
    } 
    else if ($captcha_success->success==true) {
more code here to execute if captcha successfull

Другие вопросы по теме