TLDR; Почему мое приложение перезагружается более 30 секунд, если пользовательское правило возвращает значение False, а если оно — менее 1 секунды?
Я создал собственное правило в своем приложении Laravel 5.8. Всякий раз, когда он возвращает true, для перезагрузки страницы требуется меньше секунды. Однако, когда он возвращает false, для перезагрузки требуется около 30 секунд. Кто-нибудь знает, как это исправить?
* Обратите внимание, похоже, что это не исходит от самого API, так как в Postman он возвращает ответ, будь то истина или ложь, менее чем за секунду.
В моем контроллере у меня есть Правило, и я передаю ему три параметра:
$validator = Validator::make($request->all(), [
'vat' => ['min:4|max:14', new NewRule($param_1, $param_2, $param_3)],
]);
В правиле я принимаю эти параметры в __construct
и использую их в функции passes
.
Конструкция:
public function __construct($param_1, $param_2, $param_3)
{
$this->param_1 = $param_1;
$this->param_2 = $param_2;
$this->param_3 = $param_3;
}
Проходит
В функции передачи я отправляю эти параметры через API для проверки предоставленной информации.
public function passes($attribute, $value)
{
$param_1 = $this->param_1;
$param_2 = $this->param_2;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://api.endpoint.net",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"jsonrpc\": \"2.0\",\"id\": 1,\"method\": \"Validator\",\"params\": {\"param_1\": \"".$param_1."\",\"param_2\":\"".$param_2."\"} }",
CURLOPT_HTTPHEADER => array(
"Accept: */*",
"Connection: keep-alive",
"Content-Type: application/json",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
$valid_vat = json_decode($response, true)['result']['valid'];
return $valid_vat ?: false;
}
Наконец, message
, который я возвращаю:
public function message()
{
return 'Invalid VAT number';
}
Спасибо за любые комментарии и предложения! Я признателен за это :)
Обратите внимание, что вместо return $valid_vat ?: false;
я также пробовал:
if($valid_vat === true){
return true;
} else {
return false;
}
Эй, ребята, спасибо за ваши комментарии. Я запустил url_getinfo($curl)
и получил следующее:
array(26) {
["url"]=>
string(42) "http://api.endpoint.net/"
["content_type"]=>
string(31) "application/json; charset=UTF-8"
["http_code"]=>
int(200)
["header_size"]=>
int(287)
["request_size"]=>
int(490)
["filetime"]=>
int(-1)
["ssl_verify_result"]=>
int(0)
["redirect_count"]=>
int(0)
["total_time"]=>
float(0.351214)
["namelookup_time"]=>
float(2.8E-5)
["connect_time"]=>
float(0.060498)
["pretransfer_time"]=>
float(0.0606)
["size_upload"]=>
float(116)
["size_download"]=>
float(48)
["speed_download"]=>
float(136)
["speed_upload"]=>
float(330)
["download_content_length"]=>
float(-1)
["upload_content_length"]=>
float(116)
["starttransfer_time"]=>
float(0.351183)
["redirect_time"]=>
float(0)
["redirect_url"]=>
string(0) ""
["primary_ip"]=>
string(11) "99.999.9.99"
["certinfo"]=>
array(0) {
}
["primary_port"]=>
int(99)
["local_ip"]=>
string(12) "99.999.9.99"
["local_port"]=>
int(99999)
}
Обратите внимание, что я изменил конечную точку API, IP-адреса и порты.
curl_getinfo($curl)
Я бы сначала проверил, не выглядит ли там что-то странное. - person Frnak   schedule 12.06.20190.351214
вы опубликовали результат безошибочного (быстрого) вызова? 0,35 секунды не кажутся очень длинными. Вам нужно будет предоставить информацию о проблемных вызовах, чтобы увидеть, какое время выше ожидаемого. - person Frnak   schedule 13.06.2019