Bonjour,
J'aimerais contrôle si une url est valide depuis excel et que le statut du call http soit retourné, y compris les erreurs 404.
Merci
Version imprimable
Bonjour,
J'aimerais contrôle si une url est valide depuis excel et que le statut du call http soit retourné, y compris les erreurs 404.
Merci
Salut.
Voici une fonction qui teste non pas l'existence d'une url mais qu'il y a bien eu une réponse à la requête html. Elle ne permet pas de tester qu'une réponse 404 a été générée. En fait, le Send essaie de récupérer le code html de la page appelée et:
- génère une erreur si rien n'a pu être récupéré alors que la méthode est synchrone (false comme troisième paramètre de Open);
- ne génère pas d'erreur mais le StatusText ne renvoie rien.
L'erreur récupérée en mode synchrone ne spécifie pas clairement que c'est une 404 mais que "L'URL ou le nom de serveur n'a pas pu être résolu". Le code ci-dessous utilise la méthode synchrone.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 Function UrlExists(Link As String) As Boolean Dim urlRequest As Object On Error GoTo EndHandler Set urlRequest = CreateObject("WinHttp.WinHttpRequest.5.1") With urlRequest .Open "GET", Link, False .Send UrlExists = .StatusText = "OK" End With EndHandler: End Function
Merci beaucoup,
Cette fonction me retourne toujours VRAI, même en cas d'erreur 404. Y-a-t-il un moyen de catcher cette erreur ?
Tu es sûr de l'avoir bien retranscrite?
Pièce jointe 479035
Oui: comme cela:
Les URLS que je teste sont les suivantes:Code:
1
2
3
4
5
6
7
8
9
10
11
12 Function UrlExists(Link As String) As Boolean Dim urlRequest As Object On Error GoTo EndHandler Set urlRequest = CreateObject("WinHttp.WinHttpRequest.5.1") With urlRequest .Open "GET", Link, False .send UrlExists = .statusText = "OK" End With EndHandler: End Function
WorkspaceUrl Statut URL https://groupee.sharepoint.com/sites/c17/c-128717958 DD VRAI https://groupee.sharepoint.com/sites/c15/c-128884048 VRAI https://groupee.sharepoint.com/sites/c22/c-128730546 VRAI
La première devrait retourner un 404
Cette url ne renvoie pas un 404 chez moi, mais une "page d'erreur" renvoyée par ton serveur Sharepoint... Ce n'est pas une erreur au sens technique du terme mais une réponse qui, sur le plan http, est valide. Ca ne saurait pas être interprété comme une erreur...
Le winHttpRequest ne peut interpréter comme erreur que les erreurs génériques qu'un explorateur rencontrerait, mais pas une "page d'erreur" qui est en fait une page parfaitement valide de ton site, au plan http .
Le problème est que le texte de la page est récupéré par WinHttpRequest avant d'être interprété par l'explorateur. Ce n'est donc pas le code source de la page, mais ce qui permet à l'explorateur de le créer. Or, la page incriminée est apparemment recomposée par du javascript/Ajax (probablement sur le OnLoad). Le code source de la page affichée (et donc retravaillée par le javascript via l'explorateur web) ne correspond donc pas au texte récupéré par le WinHttpRequest... Dès lors, je ne vois pas trop comment on pourrait récupérer quelque chose d'exploitable, car c'est le code source de la page (après traitement et affichage par le navigateur) qui contient du texte qui pourrait éventuellement être analysé pour déduire le résultat métier non conforme (<> résultat technique conforme) de la requête.