Portekoi Posté 12 Avril 2007 Posté 12 Avril 2007 Bonjour, Je travaille actuellement en Dotnet. Je cherche le moyen de contrôler la validité d'une url en retournant True ou False : www.google.fr = True images.google.fr = True test.php = False test.test.php = False Quelqu'un aurait il ca sous la main? Merci Portekoi
Kent Posté 12 Avril 2007 Posté 12 Avril 2007 (modifié) Salut, tu cherche la regex en elle même ou une façon de faire ? tu utilise quel langage en dotnet ? sous c# tu peut faire une regex en faisant un "using System.Regularexpression" ensuite tu test si la valeur entré correspond à une regex. Voici comment je fais pour ma part : Regex r = new Regex("http://([\\w-]+\\.)+[\\w-]+");mc = r.Matche(codeSource); http://([\\w-]+\\.)+[\\w-]+ , cherche la correspondance en testant tout les format d'url existant remplate "codeSource" par zonedesaisie.text par exemple une autre variante trés "primitive" serait : @([http://]?)@([www.]?)(.*)@((.)(fr|info|com|org|net|asso)(/?)) Modifié 12 Avril 2007 par Kent
Portekoi Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 Je suis en VB.net Le problème, c'est que l'on force le http:// alors qu'il n'y est pas toujours
Kent Posté 12 Avril 2007 Posté 12 Avril 2007 l'instruction "?" te permet de rendre le groupe facultatif : exemple : http://([\\w-]+\\.)+[\\w-]+ deviendré ([http://]?)([\\w-]+\\.)+[\\w-]+ Essai comme ça
Portekoi Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 marche pas non plus Function ISlinKExternal1(ByVal Url As String, ByVal Hostname As String) Dim page As String page = "http://" & LCase(Trim(Mid(Url, InStrRev(Url, "/") + 1))) Dim objIntPattern As New System.Text.RegularExpressions.Regex("([http://]?)([\\w-]+\\.)+[\\w-]+") MsgBox(objIntPattern.IsMatch(page).ToString & " - " & page) Return objIntPattern.IsMatch(Url) End Function
Kent Posté 12 Avril 2007 Posté 12 Avril 2007 (modifié) l'erreur se situe à quel niveau ? une exception ? C'est la regex qui est incorrecte ? Je viens de retrouver une vieille regex un peu basic mais tu peut toujours l'essayé : />http://(www.([a-zA-Z0-9]*|[-_]*)|([a-zA-Z0-9]*|[-_]*))(.net|.fr|.com|.net/|.fr/|.com/) Modifié 12 Avril 2007 par Kent
Portekoi Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 Il me retourne false pour www.google.fr et http://www.google.fr Je ne sais pas d'où cela viens
Kent Posté 12 Avril 2007 Posté 12 Avril 2007 (modifié) page = "http://" & LCase(Trim(Mid(Url, InStrRev(Url, "/") + 1))) Peut-être à cause de ça tu enleve le dernier aslash ? tu y fais quoi je saisi pas bien Quand tu mets les http:// et que tu test avec cette regex http://([\\w-]+\\.)+[\\w-]+ ça donne quoi ? Modifié 12 Avril 2007 par Kent
Portekoi Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 En faites, le but pour moi, c'est qu'avec se style d'URL : http://www.monsite.com/tartanpion/coucou/www.google.com J'isole la chaîne : www.google.com Et je vérifie si c'est une url ou non Même résultat avec http://([\\w-]+\\.)+[\\w-]+
Kent Posté 12 Avril 2007 Posté 12 Avril 2007 (modifié) Je crois qu'il vas falloir effectué les procedure de deboguage savoir si ça viens de la regex ou avant fais un pas à pas. verifie le contenu de page si tu as bien le nom de domaine uniquement. Ainsi tu vérifiera s'il a bien la forme d'une url. isMatch ne te retourne pas true si la forme n'a effectivement pas de correspondance avec la regex. En clair vérifie la forme de page apres tes Lcase Mid et Trim Sinon essaie celle-ci ^(http://|https://){0,1}[A-Za-z0-9][A-Za-z0-9\-\.]+[A-Za-z0-9]\.[A-Za-z]{2,}[\43-\176]*$ Trouvé ici * Function ValidationURL(url) * Dim modele * set modele = New RegExp * modele.pattern = "^(http://|https://){0,1}[A-Za-z0-9][A-Za-z0-9\-\.]+[A-Za-z0-9]\.[A-Za-z]{2,}[\43-\176]*$" * modele.global = true * ValidationURL = modele.test(url) * End Function C'est de l'asp mais les formats de regex sont les mêmes (microsoft oblige) Modifié 12 Avril 2007 par Kent
Portekoi Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 Re, Cela me renvoi "True" même pour test.php ou http://test.php Portekoi
Kent Posté 12 Avril 2007 Posté 12 Avril 2007 regarde ici , http://www.labo-dotnet.com/articles/Csharp...sharp/0/45.aspx Il y'a des explications et des exemples pour les Regex Mais que contient "page" après ton traitement ? cette partie est ok ?
Portekoi Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 Page contient "www.google.fr" puis "test.test.php" par exemple Je me rends compte que c'est quasi-impossible à faire. J'ai arpenté pas mal de site et je n'ai rien trouvé... Pas grave, on va faire autrement Merci en tout cas
KaRaK Posté 12 Avril 2007 Posté 12 Avril 2007 Bonsoir, Deux idées me viennent à l'esprit en lisant ce topic. 1- Faire un test sur ce qui se situe après le deuxième point et vérifier si l'extension appartient à une liste d'extensions que tu as identifiées comme nom de domaine : .fr . com etc. 2 - Envoyer une requête sur éventuel domaine puis voir si il répond correctement.
Portekoi Posté 12 Avril 2007 Auteur Posté 12 Avril 2007 Bonjour, 1 - Oui je me suis dis que j'allais faire comme ca mais comme c'est pour un logiciel, je vais me retrouver coincer s'il y a une nouvelle extension 2 - J'ai aussi essayé. J'ai trouve HttpWebRequest. A voir Merci Portekoi
Kent Posté 13 Avril 2007 Posté 13 Avril 2007 Rebonjour , voici un coup de main pour httpWebRequest public static string ouvrirUrl(string url) { HttpWebResponse HttpWResponse = null; StreamReader sr = null; try { HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(url); HttpWResponse = (HttpWebResponse)HttpWRequest.GetResponse(); // Tu peut ici testé si HttpWResponse retourne quelque chose different de null } catch (Exception ex) { string Erreur = "Impossible d'éffectuer l'operation : " + ex.ToString(); return Erreur; }
Portekoi Posté 13 Avril 2007 Auteur Posté 13 Avril 2007 Et bien ca continue... Voici mon code : Try 'Create a web request for an invalid site. Substitute the "invalid site" strong in the Create call with a invalid name. Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create("http://monserveur/damien/url/index.html"), HttpWebRequest) 'Get the associated response for the above request. Dim myHttpWebResponse As HttpWebResponse = CType(myHttpWebRequest.GetResponse(), HttpWebResponse) myHttpWebResponse.Close() Catch f As WebException Console.WriteLine(f.Message & "<--") If f.Status = WebExceptionStatus.ProtocolError Then Console.WriteLine("Status Code : {0}", CType(f.Response, HttpWebResponse).StatusCode) Console.WriteLine("Status Description : {0}", CType(f.Response, HttpWebResponse).StatusDescription) End If Catch f As Exception Console.WriteLine(f.Message & "<--") End Try Mais j'ai cette erreur lors de l'exécution : Une exception de première chance de type 'System.Net.WebException' s'est produite dans System.dll EDIT : Apparemment, il me renvoie une erreur 401 pour mon site et avec google, j'ai une erreur de type 407 (proxy). Je pense savoir d'où sa viens
Portekoi Posté 13 Avril 2007 Auteur Posté 13 Avril 2007 Re, J'ai ajouté ceci et tout fonctionne maintenant : Dim myHttpWebRequest As HttpWebRequest myHttpWebRequest = CType(WebRequest.Create("http://www.google.fr"), HttpWebRequest) myHttpWebRequest.Proxy = System.Net.WebProxy.GetDefaultProxy myHttpWebRequest.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
Kent Posté 13 Avril 2007 Posté 13 Avril 2007 Tu peut donc maintenant évaluer la validité d'une url tout simplement si elle reponds à une requette http plutôt que dans sa syntaxe ?
Portekoi Posté 13 Avril 2007 Auteur Posté 13 Avril 2007 Tout à fait mais je dois gérer aussi le StatusCode. Je continue
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant