Если вам абсолютно необходимо использовать file_get_contents, я поделюсь с вами вспомогательной функцией, которую я имею, которую вы можете адаптировать к вашим собственным потребностям
function validate_recaptcha_response($recaptcha_response)
{
$api_url = 'https://www.google.com/recaptcha/api/siteverify';
$api_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$remoteip = '';
$data = array('secret' => $api_secret, 'response' => $recaptcha_response);
$options = array(
'http' => array(
'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($api_url, false, $context);
$captcha_response = json_decode($result, true);
$r = array(
'success' => $captcha_response['success'],
'timestamp' => $captcha_response['challenge_ts'],
'hostname' => $captcha_response['hostname'],
'error_codes' => (isset($captcha_response['error-codes'])) ? $captcha_response['error-codes'] : null,
);
return $r;
}
Я вызываю это с любого контроллера, который получает ответ recaptcha (помощник загружается), используя что-то вроде
$recaptcha_check = validate_recaptcha_response($var_where_you_store_the_recaptcha_response);
Обратите внимание, что я добавляю массив $options
для построения POST
, определяя заголовок, метод и используйте http_build_query()
и stream_context_create()
перед file_get_contents()
для запроса данных.