Page 1 sur 1

[R] Problème de téléchargement avec InetGet  

Posté : ven. 01 avr. 2016 09:33
par franco
Bonjour à tous.

J'ai un souci avec un code qui me permet de télécharger un fichier...
Je pense certainement que le souci ne vient pas du code en lui-même, car il fonctionne, sauf pour un seul fichier.

Je pense donc qu'il y a un système de protection contre les téléchargements externes.
Mais je peux me tromper, d'où ma demande d'aide. :wink:

Donc j'ai fait deux codes :
- Le premier télécharge avec succès un fichier d'installation (le "setup" de Skype).
- Le second traite NirLauncher Package, mais n'arrive pas à le télécharger.

Il n'y pas d'erreur de code.
En effet, InetGetSize($url) me renvoit '0' alors qu'il s'agit du lien direct.


Voici le code qui fonctionne :
_Download_OK()

Func _Download_OK()
   $url = "http://www.skype.com/go/getskype-full"
   $fichier = @DesktopDir & "\skypefull.exe"

   Global $Form1 = GUICreate("Form1", 250, 20, 192, 124, $WS_POPUP)
   $avancement = GUICtrlCreateLabel("0 %", 210, 1, 100, 15)
   GUICtrlSetFont(-1, 10, 5500, 0, "comic sans ms")
   $Progression = GUICtrlCreateProgress(0, 0, 200, 20)

   GUISetState(@SW_SHOW)

   $myDL = InetGet($url, $fichier, 1, 1)
   GUICtrlSetColor(-1, 0xFF0000)
   GUICtrlSetFont(-1, 8, 400, 0, "comic sans ms")
   $Taille_MAX = InetGetSize($url)
   $Taille_MIN = 0
   $pourcent = 0
   If $Taille_MAX <= 0 Then
      MsgBox(0, "", "erreur")
      Exit
   EndIf
   Do
      Sleep(50)
      $Taille_MIN = InetGetInfo($myDL, 0)
      $pourcent = Int(($Taille_MIN / $Taille_MAX) * 100)
      GUICtrlSetData($Progression, $pourcent)
      GUICtrlSetData($avancement, $pourcent & " %")
   Until InetGetInfo($myDL, 2) ; Check if the download is complete.
   InetClose($myDL) ; Close the handle to release resources.
   GUICtrlSetData($Progression, 0)
   ShellExecute(@DesktopDir)
   Exit
EndFunc   ;==>_Download_OK
Voici le code qui ne fonctionne pas (donc le même avec $url et $fichier modifiés) :
► Afficher le textecode
Comme dit plus haut, je pense qu'InetGet a du mal avec ce "site".

Existe-t-il un autre moyen qu'InetGet ?
Ou existe-t-il une solution pour qu'InetGet fonctionne ?


Merci à tous :)
Et bonne journée / soirée :mrgreen:

PS :
Tiens, ça me fait penser que j'ai oublié de demander un renseignement au chef... Vais le MP bientôt, j'ai encore du ménage à faire. ^^

++

Re: [..] Problème de téléchargement avec InetGet

Posté : ven. 01 avr. 2016 11:17
par Oversid3
Je ne sais pas chez toi mais pour moi la deuxieme adresse renvoi :

Code : Tout sélectionner

Forbidden

You don't have permission to access /nirsoft_package_1.19.79.zip on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Re: [..] Problème de téléchargement avec InetGet

Posté : ven. 01 avr. 2016 11:26
par TomAijerrie
Bonjour, j'ai testé tes scripts, puis j'ai essayé avec un navigateur.

Pour le fichier qui te pose problème, j'ai une erreur 403 (accès interdit)

Il faut peut-être faire quelques requêtes pour s'identifier avant de tenter le téléchargement ?
En tout cas, InGet fonctionne normalement, le problème est que ton script n'a pas les autorisations requises pour accéder à ce fichier

Re: [..] Problème de téléchargement avec InetGet

Posté : ven. 01 avr. 2016 11:38
par franco
Salut.

« Il faut peut-être faire quelques requêtes pour s'identifier avant de tenter le téléchargement ?
En tout cas, InGet fonctionne normalement, le problème est que ton script n'a pas les autorisations requises pour accéder à ce fichier »

Etant donné que le site n'est pas le mien, je vois mal comment faire pour m'identifier.


Je n'ai pas d'erreur 403 ni 404.
Mais je n'ai testé qu'avec Firefox.


Et ensuite, je me suis dis avec une commande de type _IE(...), je pourrais peut-être faire quelque chose.


Quoiqu'il en soit, merci pour vos réponses.


++

Re: [..] Problème de téléchargement avec InetGet

Posté : ven. 01 avr. 2016 14:29
par walkson
Bonjour,
Je confirme TomAijerrie, et si on insiste, IP bloqué. D'ailleurs, il prévienne
Notice: Don't use any aggressive download manager that opens multiple connections. If you do so, your IP address might be blocked from downloading this package.
Utiliser _IE(...) risque de ne pas marcher. La solution serait de mettre le programme sur son site en téléchargement ou d'utiliser une autre adresse comme https://www.accessibiliteprogrammes.fr/ ... hargement/
RMQ: je n'ai pas testé si l'adresse proposée est clean et les MD5 Hash
RMQ 2 : nirsoft_package_1.19.79.zip est bloqué par Avast (mais quel programme n'est pas bloqué par Avast ?)

Re: [..] Problème de téléchargement avec InetGet

Posté : ven. 01 avr. 2016 19:40
par franco
Salut.

Merci Walkson

Surtout pour ce lien : https://www.accessibiliteprogrammes.fr/ ... hargement/
Tu l'as trouvé où, sans indiscrétion ?


@+ et merci à tous.

Re: [..] Problème de téléchargement avec InetGet

Posté : ven. 01 avr. 2016 20:30
par walkson
Tu l'as trouvé où, sans indiscrétion ?
Le plus simplement du monde, en cherchant nirsoft_package_1.19.79 sur Google :mrgreen:

[EDIT] Mauvaise idée que je viens de proposer !
le poids des Zip n'est pas identique sur les deux sites
Sur https://www.accessibiliteprogrammes.fr/ ... hargement/, il a été modifié donc suspect !!!
Désolé :cry:

Re: [..] Problème de téléchargement avec InetGet

Posté : ven. 01 avr. 2016 20:35
par orax
J'ajoute que pour éviter cette erreur 403, il faudrait spécifier l'en-tête HTTP Referer.
Un simple test le prouve avec ce script PowerShell trouvé sur https://chocolatey.org/packages/nirlauncher
$url = 'http://download.nirsoft.net/nirsoft_package_1.19.79.zip'
 
$tempDir = "e:\temp"
$zipFile = Join-Path $tempDir "temp.zip"
 
$referer = "http://launcher.nirsoft.net/download.html"
$wc = New-Object System.Net.WebClient
# Si la ligne ci-dessous est commentée on retrouve l'erreur 403.
$wc.Headers.Add("Referer", $referer)
$wc.DownloadFile($url, $zipFile)
Avec InetGet, ça ne sera pas possible. Il faudra utiliser WinHttpRequest (avec ObjCreate) ou autre chose.

Re: [..] Problème de téléchargement avec InetGet

Posté : lun. 04 avr. 2016 19:51
par franco
Salut.

Problème résolu.
Grâce à ce bon vieux wget.

En effet, on peut télécharger le fichier en incluant l'entête 'Referer:URL'
Usage: wget [OPTION]... [URL]...
Téléchargement:
-t, --tries=NOMBRE fixer le NOMBRE de tentatives de reprises (0 sans limite).
--retry-connrefused ré-essayer même si la connexion est refusée.
-O, --output-document=FICHIER écrire les documents dans le FICHIER.
-E, --html-extension sauvegarder les documents HTML avec la terminaison `.html'.
--ignore-length ignorer le champ de l'en-tête `Content-Length'.
--header=CHAÎNE insérer la CHAÎNE à travers les en-têtes.
--max-redirect maximum redirections allowed per page.
--proxy-user=USAGER fixer le nom d'USAGER proxy.
--proxy-password=MDP fixer le MDP (mot de passe) du proxy.
--referer=URL inclure l'en-tête `Referer: URL' dans la requête HTTP.
Et donc cette ligne de commande (CMD) m'a permis donc de télécharger le fichier convoité.

Code : Tout sélectionner

wget -O test.zip -E --referer=URL  http://download.nirsoft.net/nirsoft_package_1.19.80.zip
Bien entendu, il est facile par la suite de l'adapter en AutoIt.

Il faut juste les binaires de wget (wget.exe suffit) et les dépendances de wget (les fichiers dll suffisent) : http://gnuwin32.sourceforge.net/packages/wget.htm
Et ensuite, fileinstall.


Tant que je ne trouve pas faire autrement, j'opterai pour cette option.


++