Détecter une non réponse à une requête JSON

Bonjour,
Je supervise des appareils communiquant en HTTP/JSON.
Comment peut on créer un scénario quand un appareil ne répond pas à une requête JSON ?
« Echec de la requête HTTP : http://xxxxxxx_GetData.php?request=0x250 cURL error : Failed to connect to XXX port 80: No route to host »

Le but serait de désactiver le script faisant les requetes JSON si l’appareil ne répond pas.

NB : j’ai essayé via le plugin network en faisant un ping, mais l’appareil étant équipé d’un firewall il est possible qu’il réponde au ping mais pas en JSON.

Merci par avance

Bonjour,

Regarde le code HTTP du retour.
Ca doit surement te renvoyer un code HTTP 5xx

Bonjour

Je me trompe peut-être mais le message « no route to host » signifie que l’émetteur ne sait pas aller chercher le destinataire, mais pas que le destinataire n’a pas répondu.
S’il n’y a pas de réponse tu obtiens un time out.

Oui tu as raison.
Faut tester en fait l’httpcode de curl.
Je fais ainsi dans les plugins :

  	$result = curl_exec($curl);
  	$httpRespCode  = curl_getinfo($curl, CURLINFO_HTTP_CODE);
  	curl_close($curl);
        if($httpRespCode == 0) {
              $this->showErrors("crit", "Unable to connect to Diagral Cloud. Please verify your internet connection and/or retry later.");
         }

Si le httpcode = 0 alors c’est que le serveur n’a pas pu être joint.

Tout d’abord merci à tous les deux pour vos réponses.
Par contre comment puis je intégrer ceci dans un scénario svp?
J’ai beau chercher je ne vois pas comment faire.

Encore merci

Pour moi tu dois passer par un bloc code

1 « J'aime »

Merci, du coup j’ai essayé le code ci dessous.
Le but est de tester la réponse des appareils sur le réseau et d’afficher via un message l’état.
Par contre j’ai toujours « pas de réponse » alors que certains appareils sont bien actifs.
Une idée ?
Merci.

for ($i = 1; $i <= 249; $i++)
{
    
  	$ch=curl_init('http://192.168.22.'.$i.'_GetData.php?request=0x250');
  	  
  	$result = curl_exec($ch);
  	$httpRespCode  = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  	curl_close($ch);
    if ($httpRespCode == 0)
           {
             $title = $ch;
            $message = 'Pas de réponse';
            message::add($title, $message);
           }
    else
            {
             $title = $ch;
            $message = 'Réponse';
            message::add($title, $message);
           }
}

Bonjour

Déjà, quelle est la réponse à la requête via un navigateur?

http://192.168.22.X_GetData.php?request=0x250

Ensuite, pour voir si ton script fonctionne correctement, je le ferais déjà avec une ip. Ensuite je rajouterais la boucle. Et enfin, comment tu as fait? Tu as crée un script?

1 « J'aime »

Hello,

C’est noté pour la boucle.
Déjà merci pour ta question, car en relisant le lien http donné, j’ai remarqué une erreur.
C’était un « / » et non un « _ » dans le lien, une fois corrigé cela fonctionne.

Pour info, le script est dans un bloc code d’un scénario.

Merci a tous pour votre aide.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.