Bonjour,
voici mon problème pour lequel j'ai besoin d'aide. Donc merci par avance à ceux qui pourront m'aider. Et désolé, je me rends compte que mon message est assez long à lire...
Contexte :
pour récupérer des données d'un service fournisseur interne à mon entreprise, je dois utiliser des web services et retravailler les données qu'ils me renvoient (formatage, agglomération, .. avec aussi d'autres données de fichiers excel), par le biais d'une macro Excel VBA.
J'utilise pour cela l'utilitaire wget.exe, avec les paramétrages d'appel aux webs services, et récupère un fichier de données au format .xml, via vba, que j'importe ensuite dans excel.
Cela fonctionne bien dans la macro, du moins lorsque le web service répond convenablement.
Problème :
Le problème c'est que ces webs services peuvent ne pas répondre, ou pas tout de suite (code http 500 notamment, assez fréquent, qui impose d'attendre une trentaine de secondes avant de réexécuter l'appel). Et dans ce cas ça plante (car le fichier de données ne contient pas de données mais un message d'erreur, qui n'est pas reconnu au moment de l'import excel).
Objectif :
Je veux donc pouvoir tester le code retour du web service juste après l'appel, afin d'orienter mon traitement vers un import excel, une gestion d'erreur ou un délai d'attente, du genre :
- appel web service
- si code retour = 200 => traitement normal
- si code retour = 500 => attente, et relance au bout de 30 sec
- si code retour autre => arrêt du traitement et gestion d'erreur et message d'erreur.
Mais je n'arrive pas à le faire, et je n'ai pas trouvé de réponse malgré toutes mes recherches (nombreuses) dans les forums/FAQ et dans l'aide de wget ou de vba.
Je dois être idiot …
J'ai essayé d'intercepter le code http, avec l'instruction "%{http_code}" , mais ça ne fait que l'afficher sans l'écrire dans un fichier en sortie.
J'ai essayé de récupérer la sortie stdout dans un fichier de données (.xml), et la sortie stderr dans un fichier de log (.txt), ce qui fonctionne, mais ce dernier ne contient que l'affichage qui apparaît à l'écran quand on lance manuellement via invite de commande windows, et pas le code retour.
J'ai testé le Err.Number, mais il ne contient pas le code http du web service appelé.
Quand le WS renvoie un code 500, j'ai dans le fichier de données (.xml) le message {"responseCode":500,"message":"Read timed out","trace":null}, qui fait planter l'instruction d'import. Il me faut donc pouvoir analyser ce code retour http avant l'import !
Mon code VBA en cours de réalisation (extrait):
Remarques complémentaires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
- le choix technique est imposé : Web Service, et macro vba dans excel pour simplicité de traitement des fichiers et données diverses
- je ne peux pas installer de logiciel sur le PC pro
- j'ai été développeur il y a bien longtemps, mais quasi exclusivement en grand système (cobol). Je me débrouille en vba (sans être un pro), et je n'ai pas ou pas beaucoup de capacité dans d'autres langages
- le traitement doit être le plus simple possible, pour son écriture et sa maintenance future.

 

 
		
		 
        

 
			
			
 
   
 


 WGET dans macro VBA avec gestion du code retour
 WGET dans macro VBA avec gestion du code retour
				 Répondre avec citation
  Répondre avec citation
Partager