0% ont trouvé ce document utile (0 vote)
4 vues45 pages

API-microservices Webrtc v2

Ce document présente un tutoriel sur l'installation et la configuration d'Apache2 et MySQL, ainsi que sur la création d'un site web et l'intégration de PHP pour gérer une base de données. Il couvre des étapes pratiques telles que la création de fichiers HTML et PHP, l'utilisation de commandes MySQL pour gérer des données, et l'utilisation de cURL et Postman pour tester des requêtes HTTP. Le document aborde également la gestion des erreurs et l'importance des fichiers journaux pour le débogage.

Transféré par

nayoumer23
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues45 pages

API-microservices Webrtc v2

Ce document présente un tutoriel sur l'installation et la configuration d'Apache2 et MySQL, ainsi que sur la création d'un site web et l'intégration de PHP pour gérer une base de données. Il couvre des étapes pratiques telles que la création de fichiers HTML et PHP, l'utilisation de commandes MySQL pour gérer des données, et l'utilisation de cURL et Postman pour tester des requêtes HTTP. Le document aborde également la gestion des erreurs et l'importance des fichiers journaux pour le débogage.

Transféré par

nayoumer23
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP HTTP-MYSQL-API-frontend_WebRTC

Prof. Samuel OUYA- decembre 2022

1- Se connecter comme root et installer apache2 par la commande :

apt install apache2

2- Tester le demarrage de apache2

root@boris-VirtualBox:/home/boris# netstat -anp | grep -w 80


tcp6 0 0 :::80 :::* LISTEN 726/apache2

3- Aller dans le repertoire //etc/apache2 et lister le contenu et donner le rôle des sous repertoires

root@boris-VirtualBox:/home/boris# cd /etc/apache2/
root@boris-VirtualBox:/etc/apache2# ls
[Link] conf-enabled magic mods-enabled sites-available
conf-available envvars mods-available [Link] sites-enabled

4- Allez dans le repertoire par defaut d’hebergement de sites web d’apache2 qui est :
//var/www/html et créer le sous dossier tp1 et s’y mettre

root@boris-VirtualBox:/etc/apache2# cd /var/www/html
root@boris-VirtualBox:/var/www/html# mkdir tp1
root@boris-VirtualBox:/var/www/html# cd tp1

5- dans le meme creez votre premier site web dans le fichier [Link]

root@boris-VirtualBox:/var/www/html/tp1# nano [Link]

<html>
<head>
</head>
<body>
Mon premier fichier html est bien présenté
</body>
</html>

Lancer un navigateur et saisissez [Link]


et remarquez que l’ accent sont remplacé par des caractères bizarres
fig1 : le caractère accentué à des problemes

Editer le fichier le fichier //etc/apache2/conf-available/[Link]


et decommentez la ligne AddDefaultCharset UTF-8

Sauvegarder le fichier et redémarrer le serveur apache2 par la commande :

service apache2 restart

Dans le navigateur actualiser la page et que constatez-vous ?

Comment faire en sorte que son serveur web apache2 prenne en compte les caractères
accentués ?

6- prise en compte de code php par apache2

Toujours dans le dossier //var/www/html/tp editer le fichier [Link]

Sauvegarder le fichier et dans un navigateur saississez [Link]


fig : le code sort tel

Pourquoi le code php n’est pas executé ?

Installez la librairie libapache2-mod-php comme suit :

root@boris-VirtualBox:/var/www/html/tp1# apt install libapache2-mod-php

fig : installation du module libapache2-mod-php

Interprétez les informations dans la figure ci-dessus

Actualiser la page et que constatez vous ?

Fig : execution du code php


Comment faire en sorte que apache prenne en compte le code php ?

Que fait la ligne du code echo "<br>";

7- intérêt du fichier journal de apache2 /var/log/apache2/[Link]

éditer votre code php et faites une erreur enlevant ; de la ligne echo "<br>";

fig : erreur à la ligne 3


et relancez votre code dans le navigateur comme suit :

fig : rien ne s’affiche

On constate que dans le log, on nous indique que ; a été oublié à la ligne 3

fig : erreur à la ligne 3 =4-1


Aller à la ligne et ajoutez ; et tester dans le navigateur :

root@boris-VirtualBox:/var/www/html/tp1# nano +3 [Link]

fig : erreur rectifiée

Que fait la commande : nano +3 [Link] ?

8- Gestion de bases de données avec mysql-server

8.1 Installer mysql-server par la commande :

root@boris-VirtualBox:/var/www/html/tp1# apt install mysql-server

8.2 vérifier si le port par défaut du serveur mysql qui est 3306 est ouvert.

root@boris-VirtualBox:/var/www/html/tp1# netstat -anp | grep -w 3306

fig : ouverture du port 3306 de mysql

Se connecter sur le serveur mysql en ligne de commande en tant que root

root@boris-VirtualBox:/var/www/html/tp1# mysql -u root -p


fig : interface de mysql

Avez vous remarqué que n’importe mot de passe est accepté par le serveur pour root ?

8.3 Montrer toutes les bases sue le serveur mysql

mysql> show databases;

8. 4 Quelles sont les tables de la base mysql ?

8.5 creation de la base sgbs :

mysql> create database sgbs;

8.6 se connecter à la base sgbs

mysql> use sgbs;

8.8 creation de la table client(id,prenom,nom,code,numcompte,solde)


mysql> create table client(id int primary key auto_increment, prenom varchar(20), nom
varchar(20), code varchar(5), numcompte varchar(20), montant varchar(20));

8.9 décrire la table client en vue de voir les différents champs ;

fig : opérations de base 1 sur mysql

8.10 insertion des comptes dans la table client

mysql> insert into client(prenom,nom,code,numcompte,montant)


values("Macky","Sall","1111","1001","5800000");

Pourquoi on n’a pas précisé de Macky ?

8.11 : afficher toutes les infos de la table client

mysql> select * from client;;

fig : Affichage du contenu de la table client


8.12 Modification du solde du president Diouf à 12 7000 000

mysql> update client set montant=127000000 where id=3;

fig : update sur l’element dont l’id est 3

Ajoutons Idrissa Seck

mysql> insert into client(prenom,nom,code,numcompte,montant)


values("Idrissa","Seck","4444","1004","15800000");

fig : Ajout de Idrissa Seck


8.13 : Suppression d’un enregistrement

mysql> delete from client where id=4;

fig : suppression d’un enregistrement dans la table client

8.13 : fichier de configuration de mysql et ses principaux paramètres

En utilisant la commande :
root@boris-VirtualBox:/var/www/html/tp1# netstat -anp | grep -w 3306
tcp 0 0 [Link]:3306 [Link]:* LISTEN 11624/mysqld

Peut -on utiliser notre serveur mysql en réseau et pourquoi?

Editons le fichier :

root@boris-VirtualBox:/var/www/html/tp1# nano /etc/mysql/[Link].d/[Link]

fig : les 2 parametres d’ecoute de mysql

Interprétez les 2 paramètres bind-address et mysqlx-bind-address


fig : changement de valeurs de parametres de mysql

on redemarre le serveur mysql pour que les nouveaux parametres soient pris en compte

root@boris-VirtualBox:/var/www/html/tp1# service mysql restart

On fait de nouveau :
root@boris-VirtualBox:/var/www/html/tp1# netstat -anp | grep -w 3306

Interprétez le résultat ?

8.14 : création de compte sur le serveur mysql et affectation des droits sur une base

root@boris-VirtualBox:/var/www/html/tp1# mysql -u root -p


Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31-0ubuntu0.20.04.1 (Ubuntu)

mysql> create user bouki identified by 'passer';


Query OK, 0 rows affected (0,06 sec)

mysql> grant all privileges on sgbs.* to bouki;


Query OK, 0 rows affected (0,01 sec)

mysql> flush privileges;

Donner la signification des 3 dernières commandes

9- Recuperation des paramètres dans un programme php avec les variables superglobales
$_GET, $_POST et $_REQUEST et format des messages HTTP

9.1 Methode de reception POST


Editer le fichier :
root@boris-VirtualBox:/var/www/html/tp1# nano [Link]
Avec le contenu suivant :

fig : reception des parametes par la methode POST

9.2 : formulaire html avec la méthode POST

On rappelle qu’un formulaire sert à recueillir les données pour les transmettre à un programme pour
traitement

Editer le fichier html [Link] suivant :

<html>
<head>
</head>
<body>
<form method="POST" action="[Link]">
Prenom: <input type="text" name="prenom"><br>
Nom: <input type="text" name="nom"><br>
<input type="submit" value="Valider">
</form>
</body>
</html>

Dans un navigateur utiliser l’url [Link]


et remplissez comme suit :

fig : formulaire

Après validation, on obtient :


fig : appel de [Link] par la methode POST

9.3 Nécessité d’utilisation d’une même méthode aussi bien à l’envoi qu’à la réception :

Editer le fichier du formulaire et remplacez la methode POST par GET tout en gardant POST
dans [Link]

fig : changement de la méthode POST en GET

fig

On teste dans un navigateur comme suit :


fig : methode GET

fig : les prenom et nom sont vides et les parametres sont envoyés dans l’url

Expliquez pourquoi ces 2 paramètres sont vides

Remplacer dans le fichier [Link] par GET et reessayez

fig : meme methode GET dans le formulaire que dans [Link]

Expliquez pour tout marche correctement

remplacer la methode de reception dans [Link] par REQUEST comme suit :

fig : Methode REQUEST traitant des données aussi bien par GET que par POST
on teste

fig : tout marce malgré qu’à l’envoi la méthode est GET

Donner votre conclusion et expliquer ce qui s’est passé en utilisant le format des messages
HTTP

10- module de prise en charge de mysql dans php

10.1 se faire aider par le fichier journal de son serveur web

On edite le code php sensé afficher de maniere brute tous les clients de notre banque sgbs

root@boris-VirtualBox:/var/www/html/tp1# nano [Link]

<?php
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="select * from client";
// execution de la requte
$result=mysqli_query($conn,$sql);
// recuperation de tous les resultats dans un tableau
$tab=mysqli_fetch_all($result);
// affichage brut des resultats
print_r($tab);
?>

On execute le programme [Link] dans un navigateur

Fig : rien ne s’affiche


Utilisons la commande tail -f pour consulter le logs d’apache2

fig : indication que la fonction mysqli_connect() est inconnue

Installons le paquet php-mysql

root@boris-VirtualBox:/var/www/html/tp1# apt install php-mysql

root@boris-VirtualBox:/var/www/html/tp1# service apache2 restart

NB : il est necessaire de redemarrer apache2

On reteste
fig : Prise en compte des fonctions php fournies par le paquet php-mysql et affichage des
données de la table client de la base sgbs

10.2 Ecriture des [Link] ; [Link], [Link]

on copie [Link] en [Link] et on edite le dernier fichier

root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]

<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$code=$_REQUEST['code'];
$numcompte=$_REQUEST['numcompte'];
$montant=$_REQUEST['montant'];
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="insert into client(prenom,nom,code,numcompte,montant)
values('$prenom','$nom','$code','$numcompte','$montant')";
// execution de la requte
$result=mysqli_query($conn,$sql);
// affichage indo pour informer l'utilisateur
echo "Insertion reussie";

On installe le client HTTP avancé curl par la commande :

root@boris-VirtualBox:/var/www/html/tp1# apt install curl

On utilise curl pour tester le programme create avec la methode GET

root@boris-VirtualBox:/var/www/html/tp1# curl -X GET "[Link]


prenom=Ousmane&nom=Sonko&code=5555&numcompte=1005&montant=2500000"
En actualisant dans le navigateur, on voit que Ousmane sonko a ete creé

fig : affichage de ousmane sonko

Testons l’ajout de Khalifa Sall par la methode POST

root@boris-VirtualBox:/var/www/html/tp1# curl -X POST "[Link] -d


"prenom=Khalifa&nom=Sall&code=6666&numcompte=1006&montant=3500000"

Reaffichons le resultat de [Link] dans le navigateur

fig : affichage de khalifa inseré par la methode POST

copions le programme [Link] en [Link] qui prend le prenom et le nom et le nouveau


montant fait la mise à jour du montant.

root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]


et on le modifie comme suit :

<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$montant=$_REQUEST['montant'];
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="iupdate client set montant='$montant' where prenom='$prenom' and nom='$nom'";
// execution de la requte
$result=mysqli_query($conn,$sql);
// affichage indo pour informer l'utilisateur
echo "Mise a reussie";

?>

On execute le programme [Link] en inserant les données dans la ligne de requete avec la
methode PUT

On regarde le resultat avec [Link] dans le navigateur

fig : passage de montant de Sonko à 48500000

copions le programme [Link] en [Link]

root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]

et le modifions comme suit:

<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="delete from client where prenom='$prenom' and nom='$nom'";
// execution de la requte
$result=mysqli_query($conn,$sql);
// affichage indo pour informer l'utilisateur
echo "Suppression reussie";

?>

Executons le programme [Link] en ligne de requete avec la methode DELETE en inserant les
données dans la ligne de requete

root@boris-VirtualBox:/var/www/html/tp1# curl -X DELETE "[Link]


prenom=Khalifa&nom=Sall"

En consultant [Link] , on voit que Khalifa a eté supprimé


fig : suppression de Khalifa en envoyant les données dans la ligne de requete

11- Installation et utilisation du client HTTP avancé graphique postman

on utilise le gestionnaire de paquet snap pour installer postman

root@boris-VirtualBox:/var/www/html/tp1# snap install postman

fig : installation postman

11.1 lancement de postman en tant que simple utilisateur en tache de fond

boris@boris-VirtualBox:~$ postman &

fig : on signe avec son compte gmail


fig : on entre son email et on valide

on obtient cet interface


fig : interface obtenue apres creation de workspace

methode GET sans données

fig : postman avec get sans parametre

Modifions le montant do president Wade


fig : parametre avec put dans la ligne de requete

Ajotons le president Toumani Touré par la methode POST avec [Link]

fig : [Link] avec les données dans le body sous forme de cle/valeur

fig : visualisation des resultats dans le navigateur

Passons à la methode DELETE

fig : uttlisatation de [Link] avec des parametres dans la ligne de requete


fig : Toumani Toure est bien supprimé

11.2 Parcours de tableau de tableau avec foreach et balise HTML <table>

Copiions le programme [Link] en [Link] pour améliorer la présentation des résultats à


l’aide de tableau

On utilise la constante MYSQLI_ASSOC dans la fonction mysqli_fetch_all() pour avoir un


tableau associatif indexé par des noms des champs de notre table mysql client

root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]

oot@boris-VirtualBox:/var/www/html/tp1# nano [Link]

/ connexion à la base sgbs


$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="select * from client";
// execution de la requte
$result=mysqli_query($conn,$sql);
// recuperation de tous les resultats dans un tableau
$tab=mysqli_fetch_all($result,MYSQLI_ASSOC);
// affichage brut des resultats
$chaine="<table
border='1px'><tr><td>ID</td>td>Prenom</td>td>Nom</td>td>Code</td>td>NumCompte</
td>td>Solde</td></tr>";

foreach ($tab as $ligne) {


$chaine=$chaine."<tr><td>$ligne[id]</td>td>$ligne[prenom]</td>td>$ligne[nom]</
td>td>$ligne[code]</td>td>$ligne[numcompte]</td>td>$ligne[montant]</td></tr>";
}
$chaine=$chaine."</table>";

echo $chaine;

On executte comme suit :


fig : Amélioration des résultats via un tableau.

Comment parcourt -on un tableau en php ?


Comment concatène t-on de chaines de caracteres en php ?

12- Gestion de format de données Json et entetes

12.1 installation du paquet php-curl et utilisation des fonctions fournies json_encode() et


json_decode()

On verifie si le paquet php-json est installé

root@boris-VirtualBox:/var/www/html/tp1# apt policy php-curl


php-curl:
Installé : (aucun)
Candidat : 2:7.4+75
Table de version :
2:7.4+75 500
500 [Link] focal/main amd64 Packages
500 [Link] focal/main i386 Packages

le paquet php-json est il installé

Installons php-json

root@boris-VirtualBox:/var/www/html/tp1# apt install php-json

root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]


root@boris-VirtualBox:/var/www/html/tp1# nano [Link]

Joutons l’entete au debut du fichier

header("Content-Type:application/json");

contenu de [Link]
<?php
header("Content-Type:application/json");

// connexion à la base sgbs


$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="select * from client";
// execution de la requte
$result=mysqli_query($conn,$sql);
// recuperation de tous les resultats dans un tableau
$tab=mysqli_fetch_all($result,MYSQLI_ASSOC);
// affichage brut des resultats
print_r($tab);
?>

et executons à travers un navigateur

fig

Expliquez ce qui s’est passé ?

On modifie le fichier comme suit :

<?php
header("Content-Type:application/json");

// connexion à la base sgbs


$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="select * from client";
// execution de la requte
$result=mysqli_query($conn,$sql);
// recuperation de tous les resultats dans un tableau
$tab=mysqli_fetch_all($result,MYSQLI_ASSOC);
// affichage brut des resultats

$tab2json= json_encode($tab);
print_r($tab2json);
?>
Executons dans un navigateur

fig : json

Interpretez le resultat

13- Prise en charge de curl dans un programme php grace au paquet php-curl

Verifions si php-curl est installé, sinon on l’installe

root@boris-VirtualBox:/var/www/html/tp1# apt policy php-curl


php-curl:
Installé : (aucun)
Candidat : 2:7.4+75
Table de version :
2:7.4+75 500
500 [Link] focal/main amd64 Packages
500 [Link] focal/main i386 Packages
root@boris-VirtualBox:/var/www/html/tp1# apt install php-curl
Editons le fichier [Link] comme suit :

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '[Link]
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

$response = curl_exec($ch);

print_r($response);

curl_close($ch);

Apres execution, on obtient :

fig :

fig :

root@boris-VirtualBox:/var/www/html/tp1# service apache2 restart


On rexecute et on obtient :

fig :

Interpretez ce qui s’est passé

Ameliorons notre backend pour qu’il montre les resultats sous forme de tableau

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '[Link]
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

$response = curl_exec($ch);

curl_close($ch);

$tab=json_decode($response,true) ;

$chaine="<table
border='1px'><tr><td>ID</td><td>Prenom</td><td>Nom</td><td>Code</td><td>NumCompte</
td><td>Solde</td></tr>";

foreach ($tab as $ligne) {


$chaine=$chaine."<tr><td>$ligne[id]</td><td>$ligne[prenom]</td><td>$ligne[nom]</
td><td>$ligne[code]</td><td>$ligne[numcompte]</td><td>$ligne[montant]</td></tr>";
}
$chaine=$chaine."</table>";

echo $chaine;

?>

Apres executions, on obtient :


fig : creation d’un programme frontend qui exploite une applcation backend

Interpretez les resultats

Et remarquez les 3 phases d’utilisation curl dans php

1- initialisation de connexion avec curl_init()


2- pricisons des options
3- execution des requetes http
4- deconnexion avec curl_close()

Quels sont les principaux paramètres des fonctions fournies par le paquet php-curl ?

Utilisation de php-curl avec POST

Observez le code suivant et le commentez


en remplissant le trableau suivant :

Option curl Signification


CURLOPT_RETURNTRANSFER
CURLOPT_POST
CURLOPT_POSTFIELDS,
CURLOPT_HTTPHEADER

[Link]

<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$code=$_REQUEST['code'];
$numcompte=$_REQUEST['numcompte'];
$montant=$_REQUEST['montant'];

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, '[Link]


curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "prenom=".$prenom."&nom=".$nom."&code=".
$code."&numcompte=".$numcompte."&montant=".$montant);

$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);

print_r($result);
?>

Comment dire à une entité HTTP dans un programme php qu’on lui envoie le contenu d ’un
formulaire ?

Ecrivons un formulaire de saisie de données à envoyer à [Link]

[Link]

<html>
<head>
</head>
<body>
<form method="GET" action="[Link]">
Prenom: <input type="text" name="prenom"><br>
Nom: <input type="text" name="nom"><br>
Code: <input type="text" name="code"><br>
Numcompte: <input type="text" name="numcompte"><br>
Montant: <input type="text" name="montant"><br>
<input type="submit" value="Valider">
</form>
</body>
</html>

Apres execution
fig :

fig : insertion du president Touadera

Ecrivons le programme [Link]

<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$montant=$_REQUEST['montant'];

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, '[Link]


$nom."&montant=".$montant);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
?>

Quelle est la signification de la ligne

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');

[Link]

<html>
<head>
</head>
<body>
<form method="GET" action="[Link]">
Prenom: <input type="text" name="prenom"><br>
Nom: <input type="text" name="nom"><br>
Montant: <input type="text" name="montant"><br>
<input type="submit" value="Valider">
</form>
</body>
</html>

Apres execution , on a :
fig : mise à jour

Code de [Link]
<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "[Link]


$nom);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);

echo $result
?>

executons le programme [Link] en utilisant curl


root@boris-VirtualBox:/var/www/html/tp1# curl -X DELETE "[Link]
prenom=Archange&nom=Touadera"

fig : suppression du compte du presi

14- Urilisation de l’API REST d’asterisk

14-1 installation d’asterisk

root@boris-VirtualBox:~# apt install asterisk

14-2 Activation de serveut sous asterisk

oot@boris-VirtualBox:~# nano /etc/asterisk/[Link]


14,2 activation d’ARI

root@boris-VirtualBox:~# nano /etc/asterisk/[Link]

[general]
enabled = yes ; When set to no, ARI support is disabled.
pretty = yes ; When set to yes, responses from ARI are
; ; formatted to be human readable.
;allowed_origins = ; Comma separated list of allowed origins, for
; ; Cross-Origin Resource Sharing. May be set to * to
; ; allow all origins.
;auth_realm = ; Realm to use for authentication. Defaults to Asterisk
; ; REST Interface.
; Default write timeout to set on websockets. This value may need to be adjust>
; for connections where Asterisk must write a substantial amount of data and t>
; receiving clients are slow to process the received information. Value is in
; milliseconds; default is 100 ms.
;websocket_write_timeout = 100
; Display certain channel variables every time a channel-oriented
; event is emitted:
;
[asterisk]
type = user ; Specifies user configuration
read_only = no ; When set to yes, user is only authorized for
password =asterisk ;
root@boris-VirtualBox:~# service asterisk restart
root@boris-VirtualBox:~# netstat -anp| grep -w 8088
tcp 0 0 [Link]:8088 [Link]:* LISTEN 6220/asterisk
root@boris-VirtualBox:~#

--------------------------------------------------------------------------------------------------------------

dimanche 18/12/2022

root@boris-VirtualBox:/home/boris# nano /etc/asterisk/[Link]


root@boris-VirtualBox:/home/boris# asterisk -rx "module reload res_ari.so"
Module 'res_ari.so' reloaded successfully.
root@boris-VirtualBox:/home/boris# asterisk -rx "reload http"
Module 'http' reloaded successfully.
root@boris-VirtualBox:/home/boris#

fig

[Link]
tlsenable=yes
tlsbindaddr=yourAsteriskServerIP:8089
tlscertfile = /var/lib/asterisk/[Link]
tlsprivatekey = /var/lib/asterisk/[Link]

asterisk -rx "reload http"


asterisk -rx "http show status"

To check:
asterisk -rx "http show status"
asterisk -rx "ari show status"

root@boris-VirtualBox:/home/boris/docasterisk# asterisk -rx "reload http"


Module 'http' reloaded successfully.
root@boris-VirtualBox:/home/boris/docasterisk# asterisk -rx "http show status"
HTTP Server Status:
Prefix:
Server: Asterisk
Server Enabled and Bound to [Link]:8088

Enabled URI's:
/httpstatus => Asterisk HTTP General Status
/phoneprov/... => Asterisk HTTP Phone Provisioning Tool
/static/... => Asterisk HTTP Static Delivery
/ari/... => Asterisk RESTful API
/ws => Asterisk HTTP WebSocket

Enabled Redirects:
None.
root@boris-VirtualBox:/home/boris/docasterisk# netstat -a
root@boris-VirtualBox:/home/boris/docasterisk# ls -l /var/lib/asterisk/[Link]
-rw------- 1 root root 1704 des 18 11:34 /var/lib/asterisk/[Link]
root@boris-VirtualBox:/home/boris/docasterisk#

root@boris-VirtualBox:/home/boris/docasterisk# chmod a+r /var/lib/asterisk/[Link]


root@boris-VirtualBox:/home/boris/docasterisk# ls -l /var/lib/asterisk/[Link]
-rw-r--r-- 1 root root 1704 des 18 11:34 /var/lib/asterisk/[Link]
root@boris-VirtualBox:/home/boris/docasterisk#

root@boris-VirtualBox:~# apt -y install build-essential libncurses5-dev libxml2-dev libsqlite3-dev


libssl-dev libsrtp2-dev uuid-dev libjansson-dev

[Link]

[toto]
username=toto
type=friend
host=dynamic
secret=passer
context=rtn

[bouki]
username=bouki
type=friend
host=dynamic
secret=passer
context=rtn
[babadi]
username=babadi
type=friend
host=dynamic
secret=passer
context=rtn

[Link]

[rtn]
exten =>1001,1,Dial(SIP/toto,40,tr)
exten =>1002,1,Dial(SIP/bouki,40,tr)
exten =>1003,1,Dial(SIP/babadi,40,tr)

Mise en relation du canal SIP/toto avec l’utilisateur dont le numero est 1002 dans le context rtn

root@boris-VirtualBox:/home/boris#curl -v -u asterisk:asterisk -X POST


"[Link]
=rtn"

ARI Resources:
Resources below must be controlled by ARI in order to be reachable:
1. asterisk - global variables,server info, configuration files etc.
2. endpoints - list endpoint, send message etc.
3. channels - list, create, redirect, answer, mute, ring, hold, moh, get variable, dial etc.
4. bridges - construct sharing media among channels: list, create, add channel, remove channel
etc.
5. recordings - list, copy, stop, pause etc.
6. sounds - list, get details etc.
7. playbacks - playback control
8. deviceStates - list, change etc.
9. mailboxes - list, destroy etc.
[Link] - WbSocket events: generate etc.
[Link] - list, subscribe etc.
[Link]

[general]
enabled = yes ; When set to no, ARI support is disabled.
pretty = no ; When set to yes, responses from ARI are
; ; formatted to be human readable.
;allowed_origins = ; Comma separated list of allowed origins, for
; ; Cross-Origin Resource Sharing. May be set to * to
; ; allow all origins.
;auth_realm = ; Realm to use for authentication. Defaults to Asterisk
; ; REST Interface.
; Default write timeout to set on websockets. This value may need to be adjusted
; for connections where Asterisk must write a substantial amount of data and the
; receiving clients are slow to process the received information. Value is in
; milliseconds; default is 100 ms.
;websocket_write_timeout = 100
; Display certain channel variables every time a channel-oriented
; event is emitted:
;allowed_origins=[Link]
allowed_origins=[Link]

;channelvars = var1,var2,var3

[asterisk]
type = user ; Specifies user configuration
read_only = no ; When set to yes, user is only authorized for
; ; read-only requests.
;
password =asterisk ; Crypted or plaintext password (see password_format).
;
; password_format may be set to plain (the default) or crypt. When set to crypt,
; crypt(3) is used to validate the password. A crypted password can be generated
; using mkpasswd -m sha-512.
;
; When set to plain, the password is in plaintext.
;
;password_format = plain

Exercice :

mettre en relation 2 utilisateurs en relation à travers l’interface swagger-ui d’asterisk


fig

[Link]

[rtn]
exten =>1001,1,Dial(SIP/toto,40,tr)
exten =>1002,1,Dial(SIP/bouki,40,tr)
exten =>1003,1,Dial(SIP/babadi,40,tr)

[lisoro]
exten =>matenesi,1,Answer()
exten =>matenesi,2,Playback(en/toto)

Test
fig

Testons une annonce avec un numero fixe


fig

contenu de //var/www/html/tp1/[Link]

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,
'[Link]
tn&priority=1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'asterisk' . ':' . 'asterisk');

$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);

?>

Tester le programme dans un navigateur


[Link]

et constatez que l’annonce dans le fichier [Link] est annoncé à l’utilisateur dont le numéro est
1001

Copions [Link] en [Link] qui reçoit un numéro de téléphone tel par la méthode
REQUEST et lit l’annonce à l’utilisateur

root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]

Contenu de [Link]

<?php
$tel=$_REQUEST['tel'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
'[Link]
$tel.'&context=rtn&priority=1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'asterisk' . ':' . 'asterisk');

$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);

?>

Tester le programme avec un client avancé tel curl

root@boris-VirtualBox:~# curl -X GET "[Link]

Que constatez-vous ?

Annonce multiple

root@boris-VirtualBox:/var/www/html/tp1# mysql -u root -p sgbs

mysql> create table telephone(tel varchar(20));


Query OK, 0 rows affected (0,04 sec)

mysql> insert into telephone(tel) values("1001"),("1002");


Query OK, 2 rows affected (0,06 sec)
Records: 2 Duplicates: 0 Warnings: 0

[Link]

<?php
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
$sql="select * from telephone";
$result=mysqli_query($conn,$sql);
$tab=mysqli_fetch_all($result);
foreach($tab as $line)
{
$tel=$line[0];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '[Link]
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
}

?>

testez

# curl -X GET "[Link]

Que constatez-vous ?

Conclusion partielle
Nous avons pu :
1- activer un serveur http sur asterisk à travers le fichier [Link]
2- activer l’API ARI d’asterisk à travers le fichier [Link]
3- apprendre à utiliser l’interface web swagger d’asterisk pour exploiter la documentation de ARI
et tester directement des ressources ARI
4- créer des interfaces web de consommation de l’API ARI
5- utiliser le canal Local d’asterisk pour faire faire écouter à un ensemble d’utilisateurs un
message préenregistré

Séquences à venir

Séquence (n+1) : Développement d’API et sécurisation d’API à l’aide du framework flask et du


jeton JWT

L’idée est de :

1- Savoir installer et utiliser un module python de connexion à une base mysql


2- Savoir faire CRUD en python
3- Savoir utiliser flask-restx pour développer une API REST
4- Savoir générer de la documentation swagger d’une API REST sous flask-restx
5- Savoir protéger une API REST en utilisant JWT

Séquence (n+2) : Étude et développement de plateforme WebRTC

objectifs :

1- Comprendre les concepts de base du standard WebRTC

2- Comprendre l’architecture generale d’une application WebRTC

3- Étudier et déploiement de quelques plateformes du marché utilisant WebRTC( Microsoft Teams,


Google meeting, Bigblubutton,openfire,jitsi-meet)

4- Développement d’une application WebRTC à l’aide d’un framework

Vous aimerez peut-être aussi