Aller au contenu

Sujets conseillés

Posté

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

Posté (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é par Kent
Posté

l'instruction "?" te permet de rendre le groupe facultatif :

exemple :

http://([\\w-]+\\.)+[\\w-]+

deviendré

([http://]?)([\\w-]+\\.)+[\\w-]+

Essai comme ça :)

Posté

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

Posté (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é par Kent
Posté (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é par Kent
Posté (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é par Kent
Posté

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

Posté

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.

Posté

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

Posté

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;
}

Posté

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 :)

Posté

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

Posté

Tu peut donc maintenant évaluer la validité d'une url tout simplement si elle reponds à une requette http plutôt que dans sa syntaxe ?

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...