reCAPTCHA:file_get_contents():假定application / x-www-form-urlencoded,未指定Content-type

问题描述 投票:0回答:1

我刚刚注意到,我的reCAPTCHA出现了问题,去年很好。

这是我的代码:

public function message(Request $request) {
    $response = $_POST["g-recaptcha-response"];
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
        'secret' => '6LcwXi8UAAAAAE9zNCVfqwDOIWNazNgdK-0wQv9L',
        'response' => $_POST["g-recaptcha-response"]
        );

    //For debug purpose (remove comments)
        //dd($request->all());

    $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) {
            return redirect('/')->with('success', 'You are a bot! Go away!');;
        } else if ($captcha_success->success==true) {

            $content = 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' => http_build_query($data)
                )
            );

当我提交联系表格时,它给了我这个错误:

PagesController.php第37行中的ErrorException:

file_get_contents():假定application / x-www-form-urlencoded,未指定Content-type

第37行是:

$verify = file_get_contents($url, false, $context);
recaptcha file-get-contents
1个回答
0
投票

我已修复此问题,这是我的代码:

    private function check_recaptcha($key){
    $secret = '6LdMgJIUAAAAAOvJPW8MHjumG2xQNNuRyw-WctqQ';
    $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$key);
    $responseData = json_decode($verifyResponse);
    return ($responseData->success)? true:false;
}

public function message(Request $request) {
    //Validate
    $validator = Validator::make($request->all(), [
        'name' => 'required',
        'subject' => 'required',
        'message' => 'required',
        'email' => 'required|email',
        'g-recaptcha-response' => 'required',
    ]);

    //If validator failed
    if ($validator->fails()) {
        return redirect('/')
            ->withErrors($validator)
            ->withInput();
    }

    //Declare variable
    $name = $request->input("name");
    $email = $request->input("email");
    $subject = $request->input("subject");
    $message = $request->input("message");
    $captchaKey = $request->input("g-recaptcha-response");

    //Test reCAPTCHA
    if (!$this->check_recaptcha($captchaKey)) {//captcha gagal
        return redirect('/')->with('success', 'You are a bot! Go away!');
    } else{//captcha sukses
        $content = [
            'name' => $name,
            'email' => $email,
            'subject' => $subject,
            'message' => $message
        ];
© www.soinside.com 2019 - 2024. All rights reserved.