Problème d'envoi d'une commande HTTP

Tags: #<Tag:0x00007fcbaad29768>

Bonsoir,

Je n’arrive pas à faire fonctionner ce script
image

La commande n’est pas exécutée sur la cible alors que si je tape cette url dans mon navigateur, la cible fait bien l’action :

http://MonLogin:MonPassword@192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote

Je ne vois pas ce que je manque et le debug du plugin script ne me dit rien de plus que la réponse ne contient pas OK.

Quelqu’un peut-il me venir en aide svp ?

Bonsoir @JC38

Avez-vous essayé en mettant les mots de passe et login dans la requête comme dans l’URL du navigateur?
Et en vidant les champs Utilisateur et Mot de passe.

Pas de caractères spéciaux dans le mot de passe.

Bonjour,

Oui, j’ai essayé et malheureusement ça ne fonctionne pas. Je viens encore de le faire en mettant un mot de passe vraiment simple afin d’éviter tout problème de caractères spéciaux non gérés.

Il va falloir passer par du script php

$request_http = new com_http('http://site.fr',"login","passwd");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);

Voir plus simple directement dans un bloc code de scenario …

Bonjour @JC38

Avez-vous bien vidé les champs suivants quand vous mettez les login et passwd dans l’URL?
image

Il faut Sauvegarder pour que le script soit exécuté puis Tester pour avoir le résultat de l’exécution.

Il n’y a rien dans les logs ?

1 J'aime

@ipty.
Oui, c’est vidé, sauvegardé et testé. Dans le log, il n’y a rien de plus que l’équivalent du bandeau rouge qui s’affiche disant que la réponse ne contient pas OK.

C’est vous qui avez écrit que la réponse devait contenir OK dans le champ « La réponse doit contenir »:
image

Quelle est la réponse dans le navigateur quand l’action fonctionne?

Quand j’envoie la commande dans l’URL du navigateur, la réponse est : OK
Je pense que même si la réponse était mal interprétée côté Jeedom, l’action serait faite par la cible.
Je suis entrain de tester le script php mais je galère avec des erreurs de syntaxe, vu que je ne connais le php.

<?php 
$request_http = new com_http('http://192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote',"MonLogin","MonPassword");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
?>

jc@debian:/var/www/html/plugins/script/data$ php -f portier.php 
PHP Fatal error:  Uncaught Error: Class 'com_http' not found in /var/www/html/plugins/script/data/portier.php:2

En lisant le code php du plugin, après « La réponse ne contient pas OK » il y a du texte que vous ne donnez pas.
Pouvez-vous SVP fournir une capture d’écran du message complet?

NB: Ce que vous essayez de faire en php avec new com_http… , c’est ce que fait le plugin.
image
et dans la classe com_http:
image

@ipty : j’ai suivi la suggestion proposée par Olivier :face_with_head_bandage:

Capture depuis le navigateur
image

Depuis Jeedom
image

Le Log du plugin

[2021-02-14 17:46:05][ERROR] : Erreur exécution de la commande [...*nom complet de la commande*...] : La réponse ne contient pas "OK" : ""

Comme vous faites exécuter le php en dehors de Jeedom avec php -f, il faut ajouter au début du php :
require_once __DIR__ . '/../../../core/php/core.inc.php';
pour que la classe com_http soit définie.

Il manque la partie exécution de la commande.

NB: @olive ne s’appelle pas Olivier

1 J'aime

La réponse est donc vide.
Vous avez une doc de l’appareil que vous essayez de piloter ?

Pour Olive, désolé, j’ai lu le nom trop vite :frowning:
Pour le script php en ligne de commande , j’ai plus l’erreur gra ce à l’include. Mais j’ai aucun retour en ligne de commande.
L’appareil est un portier vidéo de chez Dahua. L’API est dispo
Voici la page relative à la fonction :
image

Il n’y a pas de login/mot de passe. Juste un UserID. Il doit être passé sur la ligne de commande avec le channel et le Type comme vous l’avez fait dans le navigateur.

C’est quelle réf votre portier?
Vous avez un lien vers la doc complète?

Si je ne passe pas le login et le mot de passe dans l’url du navigateur, je me fais prompter pour les entrer.
Le modèle c’est un VTO3211D
Pour la doc de l’API, elle fait 8 Mo en pdf.
Voici un lien, il faudra un compte je pense pour la récupérer, sinon je peux l’envoyer par un autre moyen.
https://ipcamtalk.com/threads/latest-version-of-dahua-http-api-for-ipc-documentation.45213/

Vous pourriez taper cette commande en ssh:
curl -s --globoff --digest --user login:mdp http://192.168.1.110/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote
Je l’ai trouvé sur ce forum: https://easydomoticz.com/forum/viewtopic.php?t=6729&start=10

Voici le résultat, ça n’a rien fait au niveau du portier.

jc@debian:/var/www/html/plugins/script/data$ curl -s --globoff --digest --user MonLogin:MonPassword http://192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote
[1] 4687
[2] 4688
[3] 4689
jc@debian:/var/www/html/plugins/script/data$ Error
Bad Request!

[1]   Fini                    curl -s --globoff --digest --user MonLogin:MonPassword http://192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor
[2]-  Fini                    channel=1
[3]+  Fini                    UserID=101
[2]-  Fini                    channel=1
[3]+  Fini                    UserID=101
jc@debian:/var/www/html/plugins/script/data$ 

MonLogin et MonPassword, c’est ceux que vous tapez dans le navigateur ?

Oui, j’ai remplacé les vrais par MonLogin et MonPassword dans les posts du forum.

Je sèche. :thinking: