Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

recaptcha error; Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in

Tags:

php

recaptcha

I am using recaptcha 2 and getting this weird error: Notice: file_get_contents(): Content-type not specified assuming application/x-www-form-urlencoded in ... on line 38.

the code is:

<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

line 38 that triggers the error message is:

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

The error message appears whether or not the robot box has been ticked. If the box has not been ticked, the "You did not prove you are human" message appears and if the robot box has been ticked the code is correctly processed, although the error message still appears.

How can I remove the error message? The site has an SSL certificate so I tried changing :

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

to:

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

and that removes the error message, but then the "You did not prove you are human" message appears, even if the robot box is checked.

I am stumped.

Regards

Tog

like image 775
Tog Porter Avatar asked Oct 29 '25 16:10

Tog Porter


2 Answers

Yes, I fixed it with:

<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
like image 66
Tog Porter Avatar answered Oct 31 '25 07:10

Tog Porter


I think there is a parameter missing inside your options, try something like this:

$options = array(
    'http' => array (
                'method' => 'POST',
                'content' => http_build_query($data),
                'header' => 'Content-Type: application/x-www-form-urlencoded'
            )
        );
like image 33
Thiago Ryuuga Avatar answered Oct 31 '25 06:10

Thiago Ryuuga