Page 1 sur 1

[R] InetGet retourne mauvaise valeur?

Posté : dim. 09 août 2009 21:05
par Pollux
Bonsoir,

Je travaille en ce moment sur un sous-programme d'updater pour un autre de mes programmes.
La fonction InetGet étant essentielle, je la teste exhaustivement pour vérifier que tout marche impec.

Code : Tout sélectionner

$Telechargeable = InetGet("http://xxxxxx.com/yyyyyy/fichier.ini", @ScriptDir&"\fichier.ini", 1, 0)
If $Telechargeable = 0 Then
MsgBox(1,"Erreur","Une erreur s'est produite. Réessayez plus tard.",6)
Exit
EndIf
J'ai prit soin de retirer du serveur le "fichier.ini" donc le programme ne devrait pas le trouver et renvoyer 0, et par conséquent afficher le message d'erreur et sortir du programme. Le souci c'est que l'InetGet me renvoie toujours 1 (que le fichier soit là ou non), et donc le programme continue son exécution comme si le fichier avait été trouvé, chose que je veux à tout prix éviter.

Cela doit être un truc tout bête, mais impossible de mettre la main dessus.


Merci d'avance,

Pollux

Re: [..] InetGet retourne mauvaise valeur?

Posté : dim. 09 août 2009 21:17
par jbnh
Cela est étrange, je n'ai pas ce problème.

Vérifiez bien que le fichier n'existe pas sur votre ftp

Re: [..] InetGet retourne mauvaise valeur?

Posté : dim. 09 août 2009 21:43
par jumby
Avez-vous modifié sensiblement l'url renseigné auprès d'inetget ou avez-vous supprimé votre fichier depuis votre ftp ?
Il peut arriver qu'en supprimant un seul caractère du nom du fichier à télécharger, le téléchargement s'effectue malgré tout.

Votre code plus haut est correct, vous pouviez aussi tester ceci :
@InetGetBytesRead = the number of bytes downloaded, or -1 if there has been an error.

Code : Tout sélectionner

$Telechargeable = InetGet("http://xxxxxx.com/yyyyyy/fichier.ini", @ScriptDir&"\fichier.ini", 1, 0)
If @InetGetBytesRead = -1 Then
MsgBox(1,"Erreur","Une erreur s'est produite. Réessayez plus tard.",6)
Exit
EndIf

Re: [..] InetGet retourne mauvaise valeur?

Posté : dim. 09 août 2009 22:24
par Pollux
Rebonsoir,

Je viens d'en découvrir un peu plus.
Lorsque le "fichier.ini" est introuvable, le script télécharge quand même un pseudo "fichier.ini" qui contient un code source de page web : Celui où l'on est redirigé si le fichier n'est pas trouvé! Quelque part c'est logique car, si je ne me trompe pas, c'est en fait une pseudo fenetre internet explorer cachée qui s'ouvre, et donc elle agit comme telle.
Du coup, je suis redirigé vers http://www.xxxxx.com/404.jsp et le contenu source de cette page est copié dans le ce pseudo "fichier.ini" que le script télécharge à mon insu.
Je vois bien un moyen de corriger le souci en forcant à lire la première ligne du "fichier.ini" pour savoir si oui ou non il s'agit du "vrai" fichier.ini mais bon.

J'opterai pour cette solution si jamais il n'y a pas d'autre solution...

Pollux

Re: [..] InetGet retourne mauvaise valeur?

Posté : dim. 09 août 2009 23:04
par Iste
Oui en effet, c'est logique
En essayant de lire l'ini tu t'en serais rendu compte tout de suite
Sinon, deux solution :
avant de DL tu vérifit que la size du fichier n'est pas celle de la page 404 -> InetGetSize()
Apres le DL tu vérifit que le fichier ne soit pas la page 404

Re: [..] InetGet retourne mauvaise valeur?

Posté : lun. 10 août 2009 14:10
par timmalos
Je viens de toucher un peu aujourd'hui à InetGet et il faut faire attention avec la version bêta d'autoit, vous pouvez miantenant utilisé InetRead qui va directement lire le fichier sans devoir l'ouvrir après comme on faisait avant. C'est assez pratique et ca vous permet, grace à un StringLeft(..., 10) de tester si les 10 premiers caracteres sont bien ceux du fichier que vous souhaitez.

Re: [R] InetGet retourne mauvaise valeur?

Posté : lun. 10 août 2009 17:51
par Pollux
Vu que la redirection dépend des hébergeurs, je vais opter pour la lecture du fichier. C'est quelques lignes en plus mais au moins ça marche.

Merci pour vos réponses ! Je passe en [R]ésolu.


Pollux

Re: [R] InetGet retourne mauvaise valeur?

Posté : lun. 10 août 2009 17:58
par Iste
Tu peux aussi placer une métadonnée dans l'ini, genre "~#YES,I'M THE INI#~" Puis avec un simple

Code : Tout sélectionner

If StringInStr ("~#YES,I'M THE INI#~",_INetGetSource("url")) Then
t'as la réponse. Tu peux aussi opter pour HTTPRequest(), voir ici