pingoo666 Posté(e) le 2 avril 2012 Posté(e) le 2 avril 2012 Bonjour aux lispeurs, J'aurais besoin de télécharger un fichier sur un serveur internet. j'ai trouvé cette fonction sur un autre forum : (defun L12_GetFileFromURL (url path / utilObj tempPath newPath) ;; © RenderMan 2011, CADTutor.net ;; Example: (download "http(s)://username:password@server/source.ext" (getvar 'dwgprefix)) (vl-load-com) (setq utilObj (vla-get-utility (vla-get-activedocument (vlax-get-acad-object)))) (if (= :vlax-true (vla-isurl utilObj url)) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-GetRemoteFile (list utilObj url 'tempPath :vlax-true))) (prompt "\n <!> Error Downloading File From URL <!> ") (progn (if (findfile (setq newPath (strcat path (vl-filename-base url) (vl-filename-extension url)))) (vl-file-rename newPath (setq voidPath (strcat (vl-filename-directory newPath) "\\void_" (vl-filename-base newPath) "_" (menucmd "M=$(edtime,$(getvar,date),YYYY-MO-DD-HH-MM-SS)") (vl-filename-extension newPath))))) (vl-file-copy tempPath newPath) (vl-file-delete tempPath))) (prompt "\n <!> Invalid URL <!> ")) (vl-catch-all-apply 'vlax-release-object (list utilObj)) (princ) ) Elle fonctionne bien sauf dans un cas : le fichier que je dois récupérer n'a pas d'extension et la ca foire, le fichier généré est vide. Une fonction crée par patrick_35 me ressort une erreur dans tous les cas : (defun download (url dir / byte fic file fso http ok tbl taille) (setq http (vlax-create-object "MSXML2.XMLHTTP") fso (vlax-create-object "Scripting.FileSystemObject") file (strcat dir (vl-filename-base url) "2" (vl-filename-extension url) ) ) (vlax-invoke-method http 'open "get" url :vlax-false) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke (list http 'send)) ) (princ (strcat "\nLe lien " url " n'est pas valide.")) (if (eq (vlax-get http 'status) 200) (if (vl-catch-all-error-p (setq taille (vl-catch-all-apply 'vlax-invoke (list http 'getResponseHeader "Content-Length") ) ) ) (princ "\nErreur de lecture sur la taille du fichier.") (if (< (atoi taille) (vlax-get (vlax-invoke fso 'getdrive (substr (vlax-invoke fso 'getabsolutepathname file) 1 1) ) 'freespace ) ) (progn (princ "\nTéléchargement en cours...") (princ) (while (not (eq (vlax-get http 'readystate) 4)) (vla-eval (vlax-get-acad-object) "DoEvents") ) (setq tbl (vlax-safearray->list (vlax-variant-value (vlax-get-property http 'responsebody)) ) ) (if (vl-catch-all-error-p (setq fic (vl-catch-all-apply 'vlax-invoke (list fso 'createtextfile file) ) ) ) (princ (strcat "\nImpossible de créer le fichier " file)) (progn (foreach byte tbl (vlax-invoke fic 'write (vl-list->string (list byte))) ) (vlax-invoke fic 'close) (setq ok T) ) ) ) ) ) (princ (strcat "\n" (vlax-get http 'statustext) "...Erreur " (itoa (vlax-get http 'status)) "." ) ) ) ) (vlax-release-object http) (vlax-release-object fso) ok ) C'est l'erreur "code caractère de la liste incorrect: 4233" Une idée ? Merci d'avance !
Patrick_35 Posté(e) le 2 avril 2012 Posté(e) le 2 avril 2012 Salut Tu as la fonction Télécharger. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 2 avril 2012 Posté(e) le 2 avril 2012 J'en ai aussi profité pour revoir download (defun download (url dir / byte fic file fso http ok tbl taille) (setq http (vlax-create-object "MSXML2.XMLHTTP") fso (vlax-create-object "Scripting.FileSystemObject") file (strcat dir (vl-filename-base url) (vl-filename-extension url))) (vlax-invoke-method http 'open "get" url :vlax-false) (vl-mkdir dir) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke (list http 'send))) (princ (strcat "\nLe lien " url " n'est pas valide.")) (if (eq (vlax-get http 'status) 200) (if (vl-catch-all-error-p (setq taille (vl-catch-all-apply 'vlax-invoke (list http 'getResponseHeader "Content-Length")))) (princ "\nErreur de lecture sur la taille du fichier.") (if (< (atoi taille) (vlax-get (vlax-invoke fso 'getdrive (substr (vlax-invoke fso 'getabsolutepathname file) 1 1)) 'freespace)) (progn (princ "\nTéléchargement en cours...")(princ) (while (not (eq (vlax-get http 'readystate) 4)) (vla-eval (vlax-get-acad-object) "DoEvents") ) (setq tbl (vlax-safearray->list (vlax-variant-value (vlax-get-property http 'responsebody)))) (if (vl-catch-all-error-p (setq fic (vl-catch-all-apply 'vlax-invoke (list fso 'createtextfile file)))) (princ (strcat "\nImpossible de créer le fichier " file)) (progn (foreach byte tbl (vlax-invoke fic 'write (vl-list->string (list (+ 12288 byte)))) ) (vlax-invoke fic 'close) (setq ok T) ) ) ) ) ) (princ (strcat "\n" (vlax-get http 'statustext) "...Erreur " (itoa (vlax-get http 'status)) ".")) ) ) (vlax-release-object http) (vlax-release-object fso) ok ) Test(download "http://carnet-de-cablage.chez-alice.fr/Blog/Syn-v1.21.zip" "c:/test/") Par contre, pour mon test sur le fichier zip, j'ai du ajouter 12288 à chaque byte du fichier.Il y a quelque chose qui m'échappe pour l'instant. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant