Réseau

Ci-dessous l’ensemble des classes qui concernent la gestion des communications réseau. Une collection COL_Réseau permet également de récupérer diverses informations sur les cartes réseaux, le réseau local et les droits de l’utilisateur loggué.

La classe cRéseau

Cette classe sert de base aux classes ci-dessous afin de centraliser la structure des URL et la liste des protocoles connus. Elle ne contient qu’une seule méthode.

La classe cHTTP

Elle pourrait s’appeler cHTTPClient, en comparaison avec la classe qui suit. Elle regroupe toutes les réponses possibles venant d’une requête à un serveur (ex : 404 = _HTTPStatutNotFound et les messages WinSock) et toutes les couleurs qui sont nommées en « web » (ex : _CouleurMediumSeaGreen) et dont la conversion est proposée dans COL_PCS (couleur vers entier).

Elle contient 3 méthodes principales :

  1. HttpRequêteServeur : méthode optimisée pour interroger un serveur utilisant cHTTPServeur
  2. RequêteBloc : parfois les appels API se font par blocs séparés par des valeurs numériques. Cette méthode permet d’enlever les valeurs numériques « parasites »
  3. Télécharge : permet de télécharger un fichier avec réglage possible du débit maximum (ce que la fonction HTTPRequête ne permet pas mais bien la variable httpRequête depuis WD25).

La classe cHTTPServeur

Cette classe est particulière et permet, à elle seule, de faire un mini serveur HTTP que l’on Démarre et Arrête avec les méthodes du même nom.

Afin d’en faire un webservice, il est possible de lui ajouter des fonctions programmées en WLangage avec FonctionAjoute. Le code passé en paramètre est alors compilé et, si aucune erreur n’apparaît, est mis en mémoire du serveur.  Pour l’appeler, il suffit de mettre dans son navigateur : http://MonServeur:NuméroDePort/MaFonction?Param1=Valeur1&Param2=Valeur2 …

Pour éviter de se battre avec des certificats, ce serveur permet le cryptage « build-in » de requêtes reçues et des résultats renvoyés. Pour cela, une clé de cryptage est passée en paramètre de la méthode Démarre.  Cette dernière permet également l’appel de 3 procédures CallBack (appels entrants, réponses sortantes et erreurs) afin de visualiser, dans une fenêtre, le trafic du serveur.

Pour augmenter encore la sécurité, la méthode IPAjoute permet d’ajouter des adresses IP V4 à une « liste blanche » (la méthode IPRaz vide cette liste blanche).  Si cette liste est utilisée, seule les requêtes venant des IP de la liste seront exécutées.

Notez que ce serveur, sans utiliser le cryptage, est compatible avec les requêtes faites par un navigateur, Advanced REST client ou tout autre requêteur HTTP.

Exemple sur cette page.

La classe cFTP

Facilite l’accès à un serveur FTP (tout protocole) en proposant la connexion, la déconnexion, le téléchargement, le téléversement, l’existence d’un fichier et la suppression. Comme la classe cFichier, on ne se préoccupe plus de l’indice de connexion.

Elle contient également les constantes relatives aux réponses du serveur (200 = Command OK).

La classe cHTML

Vous pourrez, grâce à cette classe, extraire de l’information d’une page Web.  En ajoutant une URL ou en passant directement du contenu HTML, via les propriétés, un traitement met chaque balise dans un tableau (y compris ses attributs et le texte contenu entre la balise d’ouverture et de fermeture). Il ne suffit plus qu’à repérer un mot clé (ex : le nom d’une classe dans les attributs) pour récupérer la contenu (utiliser pour cela l’inspecteur dans votre navigateur préféré).

Exemple de récupération les artistes et les titres d’une compilation (page de juin 2023). Ce code est proposé à des fins didactiques uniquement (voir les conditions d’utilisation du site sur lequel vous faite cette extraction). Les particularités sont, ici, d’aller chercher les autres artistes du même titre, de ne pas prendre en compte les auteurs/producteurs et de ne pas prendre les informations en bas de page.

sArtiste est une chaîne = [
class="link_1ctor link
]
sTitre est une chaîne = [
class="trackTitle
]
tabTitres 	est un tableau de chaînes
sCode		est une chaîne
clHTML 		est un cHTML(cHTML.DepuisUTF8)
sURLs 		est une chaîne = "https://www.discogs.com/fr/master/331938-Various-Summer-Hit-Mix-90"
tabURL 		est un tableau de chaînes
 
POUR TOUTE CHAÎNE sURL DE sURLs SEPAREE PAR RC
	sCode=ExtraitChaîne(ExtraitChaîne(sURL,6,"/"),1,"-")
	SI TableauCherche(tabURL,tcLinéaire,sCode)>0 ALORS CONTINUER SINON TableauAjoute(tabURL,sCode)
	SI sURL~="" OU sURL[[1]]="v" ALORS CONTINUER
	Message(sURL);Multitâche(-1)
	clHTML.LitURL(sURL)
	SI clHTML.p_sHTML>"" ALORS
		nTd,nTr		est un entier
		sNomArtiste		est une chaîne
		sNomTitre		est une chaîne
		nArtiste,nTitre sont des entiers
		nArtiste1 		est un entier = clHTML.Recherche(*,sArtiste)
		TANTQUE nArtiste1>0 _ET_ clHTML.m_tabBalises[nArtiste1].sContenu DANS ("","various","Various","Unknown Artist")
			nArtiste1 = clHTML.Recherche(*,sArtiste,*,nArtiste1+1)
		FIN
		TANTQUE nArtiste1>0	
			sNomArtiste	= clHTML.m_tabBalises[nArtiste1].sContenu;sNomTitre="?"
			//recherche des co-artistes
			nTd			= clHTML.Parent(nArtiste1,2)							//on est sur le a, on remonte le span jusqu'au td
			SI nTd>0 _ET_ clHTML.m_tabBalises[nTd].sNom="td" ALORS
				nArtiste 	= clHTML.Recherche(*,sArtiste,*,nTd+1)			//c'est l'artiste sur lequel on était, on l'ignore
				nArtiste 	= clHTML.Recherche(*,sArtiste,*,nArtiste+1)	//c'est un autre artiste
				TANTQUE nArtiste>0 _ET_ nArtiste<>nArtiste1 _ET_ nTd=clHTML.Parent(nArtiste,2)	//il faut que les artistes soient différent et qu'on est toujours dans le même td
					SI PAS clHTML.m_tabBalises[nArtiste].sContenu DANS ("","various","Various","Unknown Artist") ALORS sNomArtiste+=[", "]+clHTML.m_tabBalises[nArtiste].sContenu
					nArtiste 	= clHTML.Recherche(*,sArtiste,nArtiste+1)//c'est un autre artiste
				FIN
				//recherche du titre
				nTr		 	= clHTML.ParentJusqueBalise(nArtiste1,"tr")				//on remonte jusqu'au tr
				SI nTr>0 ALORS
					nTitre		= clHTML.Recherche("span",sTitre,*,nTr+1)
					SI nTitre<1 ALORS nTitre = clHTML.Recherche("td",sTitre,*,nTr+1) SI clHTML.m_tabBalises[nTitre].sContenu="" ALORS nTitre = clHTML.Recherche("span",*,*,nTitre+1) SI nTitre>0 ALORS 
						sNomTitre=clHTML.m_tabBalises[nTitre].sContenu
						sNomTitre=Remplace(ChaîneFormate(SansEspace(ExtraitChaîne(sNomArtiste,1,"("))+" - "+SansEspace(ExtraitChaîne(sNomTitre,1,"(")),ccSansAccent+ccSansEspace+ccMinuscule),".","")
						SI TableauCherche(tabTitres,tcLinéaire,sNomTitre)<1 ALORS TableauAjoute(tabTitres,sNomTitre)
					FIN
				FIN
			FIN
			nArtiste1 	= clHTML.Recherche(*,sArtiste,*,Max(nTitre,nArtiste1)+1)
		FIN
	FIN
FIN
Info(TableauVersChaîne(tabTitres))