TLDR;Почему моему приложению требуется более 30 секунд для перезагрузки, когда пользовательское правило возвращает значение False, а менее 1 секунды при значении true?
Я создал собственное правило в своем приложении 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;
}
Passes
В рамках функции pass я отправляю эти параметры через 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-адреса и порты.