2016-07-31 2 views
1

Я использую следующий PHP проверить Google ReCaptcha:Recaptcha очень медленно на Linode сервере

функция checkCapcha ($ ответ, $ IP) {

 try { 


      $url = 'https://www.google.com/recaptcha/api/siteverify'; 
      $data = ['secret' => $secret, 
        'response' => $response, 
        'remoteip' => $ip]; 

      $options = [ 
       'http' => [ 
        '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($url, false, $context); 
      //return json_decode($result)->success; 
      //echo $result; 
      if(json_decode($result)->success){ 
       return true; 
      }else{ 
       return false; 
      } 
     } 
     catch (Exception $e) { 
      return null; 
     } 

} 

Он отлично работает с моего домашнего сервера, но когда я использую тот же код на моем linode, для возврата требуется результат. Результат правильный, но это занимает около 3 минут.

Может кто-нибудь проконсультироваться.

Заранее благодарен

+0

Вы рассчитали операцию? Возможно, вам захочется обратиться за помощью к вашему хостинг-провайдеру, если это связано с медленной сетью. – frz3993

+0

Привет, Спасибо за ответ. Я не уверен, что полностью понимаю вас. Операция занимает 2,8 минуты, из которых почти все время ожидания (TTFB). Я также тестировал скорость соединения с сервером более 750 Мбит/с. (speedtest.net), я также изменил часть «www.google.com» на IP-адрес google для проверки проблем DNS. На моем домашнем сервере с _slow internet_ время ожидания составляет 400 мс. – mrmin24

ответ

0

У меня такая же проблема. Для получения ответа от Google API требуется в среднем 2000 мс.

Дело в том, что если я использую curl, это так медленно. Если я вернусь к простой функции file_get_contents, она работает намного быстрее (то есть обычное время).

Теперь, когда я думал, что виновником может быть curl, это не так, как если бы я нацеливался на другой HTTPS API, он работает безупречно быстро.

curl тратит 99% времени ожидания для Google API, чтобы ответить обратно с содержанием, то есть [starttransfer_time] => 2.332313

Это действительно странно.

Таким образом, решение было бы избежать curl в этом прецеденте и переключиться на file_get_contents, хотя это НЕ виновник!

0

Я использую Centos 7, у меня была та же проблема.

Сначала добавьте запись www.google.com/etc/hosts, если это решает вашу проблему, чем отключить IPV6 на вашем сервере.

  1. Append ниже линии в /etc/sysctl.conf:

    net.ipv6.conf.all.disable_ipv6 = 1 
    net.ipv6.conf.default.disable_ipv6 = 1 
    
  2. Для настройки аффективные, выполните:

    sysctl -p