Я хочу создать виртуальную среду, чтобы проверять, не работает ли веб-служба.
Случай: если веб-служба не работает в течение 7 секунд, система должна повторить попытку один раз, а если не работает, она должна отправить уведомление администратору.
$ch = curl_init();
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_URL, $url);
// Use 0 to wait indefinitely.
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7);
// The maximum number of seconds to allow cURL functions to execute
curl_setopt($ch, CURLOPT_TIMEOUT, 7);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$responseData = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
$httpCode = curl_getinfo($ch);
curl_close($ch);






Вы можете попробовать это:
$url = 'my.url';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($retcode == 200)
{
// It's working
}
else
{
// It's down
}
Этот код выше проверяет URL-адрес и возвращает его код возврата HTTP. Если 200, значит, вверх, а то могут быть проблемы. Если в настоящее время у вас есть проблемы, пожалуйста, добавьте их в свой первый пост. Прямо сейчас мы не знаем, в чем проблемы в вашем коде.
На самом деле мой код работает нормально, но я получил требование клиента о том, что если система попадает в веб-службу и она не работает, система должна проверять это в течение 7 секунд, и если он не получает ответа, программа должна спать на 5 секунд и повторить попытку. Проблема в том, что я не могу сказать провайдеру веб-сервисов, чтобы он отключил сервисы для тестирования моего кода. Ты хоть представляешь, как я могу создать для него виртуальную среду.
Вы можете просто попытаться запросить несуществующий URL-адрес, что заставит вас повторить попытку через 7 секунд, а затем отправить вам письмо
Да, я уже сделал это, но программа получает ответ до 7 секунд, и из-за этого я не могу проверить случай.
Что вы имеете в виду, получив ответ до истечения 7 секунд?
Если я пробую код с несуществующим URL-адресом, он получает ответ в течение 7 секунд, а не ищет его в течение 7 секунд.
Я упомянул свой код под своим вопросом. Пожалуйста, проверьте это один раз.
Я нашел решение для этого. Мы можем просто указать URL как google.co.in:8080
Наконец, я нашел решение.
function checkData($loop = 0){
$url = 'http://google.co.in:8080/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_URL, $url);
// Use 0 to wait indefinitely.
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7);
// The maximum number of seconds to allow cURL functions to execute
curl_setopt($ch, CURLOPT_TIMEOUT, 7);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$responseData = curl_exec($ch);
$curl_errno = curl_errno($ch);
$curl_error = curl_error($ch);
$httpCode = curl_getinfo($ch);
curl_close($ch);
if ($curl_errno > 0){
if ($loop > 1 ){
//send mail to admin
}else{
$loop++;
sleep(7);
checkData();
}
}
}
checkData();
Это НЕ ответ на требование вашего клиента, пожалуйста, внимательно проверьте требования. Где ваш код спать 5 секунд?
Почему вы просите время для сна, потому что оно не требуется. Я пытался создать среду, если сервер не отвечает, но теперь все работает нормально и одобрено нашим менеджером по программированию, тестировщиками и клиентами.
ну, это то, что вы сказали в своем комментарии, "и если он не получит ответа, программа должна спать в течение 5 секунд и повторить попытку"
@DineshChand: Я только что опубликовал базовое решение и считаю, что хороший разработчик может его изменить. Теперь редактировал по ответу.
Здравствуйте, пожалуйста, еще раз измените мой вопрос и помогите мне избавиться от проблемы.