Téléchargez tout le contenu d'une page distante en même temps
Pour l'utiliser, enregistrez le code ci-dessus sous un fichier tel que : downfile.asp
Tapez dans votre navigateur :
http://votre adresse/downfile.asp?url=http://www.baidu.com/index.html
<% 'Définir le délai d'attente Serveur.ScriptTimeout=9999 '############## 'Fonction de sauvegarde de fichiers '############# fonction SaveToFile (de, vers fichier) en cas d'erreur, reprendre ensuite faible geturl, objStream, imgs geturl=trim(de) Monbyval=getHTTPstr(geturl) Définir objStream = Server.CreateObject (ADODB.Stream) objStream.Type =1 objStream.Open objstream.write Mybyval objstream.SaveToFile dans un fichier,2 objstream.Close() définir objstream = rien si err.number<>0 alors err.Clear fonction de fin '############## 'Remplacement du traitement des caractères '############# fonction geturlencodel(byval url)'Conversion du nom de fichier chinois Dim je, code geturlencodel= si trim(Url)= alors quittez la fonction pour i=1 à len(Url) code=Asc(milieu(Url,i,1)) si code<0 Alors code = code + 65536 Si code>255 Alors geturlencodel=geturlencodel&%&Gauche(Hex(Code),2)&%&Droite(Hex(Code),2) autre geturlencodel=geturlencodel&mid(Url,i,1) finir si suivant fonction de fin '############## 'L'acquisition XML d'une page distante démarre '############# fonction getHTTPage(url) en cas d'erreur, reprendre ensuite atténué http définir http = Server.createobject (Msxml2.XMLHTTP) Http.open GET,url,false Http.envoyer() si Http.readystate<>4 alors quittez la fonction getHTTPPage=bytes2BSTR(Http.responseBody) définir http = rien si err.number<>0 alors err.Clear fonction de fin Fonction octets2BSTR(vIn) dim strRetour dim je,ThisCharCode,NextCharCode strRetour = Pour i = 1 À LenB(vIn) ThisCharCode = AscB(MidB(vIn,i,1)) Si ThisCharCode < &H80 Alors strReturn = strReturn & Chr(ThisCharCode) Autre NextCharCode = AscB(MidB(vIn,i+1,1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) je = je + 1 Fin si Suivant octets2BSTR = strRetour Fonction de fin '############## 'Acquisition XML des fins de pages distantes. Cette section est commune à tous les programmes des voleurs. '############# '############## 'Décomposer l'adresse et obtenir le nom du fichier '############# fonction getFileName (nom de fichier byval) si instr(nom de fichier,/)>0 alors fileExt_a=split(nom de fichier,/) getFileName=lcase(fileExt_a(ubound(fileExt_a))) si instr(getFileName,?)>0 alors getFileName=gauche(getFileName,instr(getFileName,?)-1) finir si autre getFileName=nom du fichier finir si fonction de fin '############## 'Obtenir la fonction de page distante '############# fonction getHTTPstr(url) en cas d'erreur, reprendre ensuite atténué http définir http=server.createobject(MSXML2.XMLHTTP) Http.open GET,url,false Http.envoyer() si Http.readystate<>4 alors quittez la fonction getHTTPstr=Http.responseBody définir http = rien si err.number<>0 alors err.Clear fonction de fin '############## 'Fonction de traitement FSO, créer un répertoire '############# Function CreateDIR(ByVal LocalPath) 'Programme pour créer un répertoire S'il existe plusieurs niveaux de répertoires, créez-les un par un. En cas d'erreur, reprendre ensuite LocalPath = Remplacer (LocalPath, /, /) Définir FileObject = server.CreateObject (Scripting.FileSystemObject) patharr = Split (CheminLocal, /) path_level = UBound(patharr) Pour I = 0 Vers path_level Si I = 0 Alors pathtmp = patharr(0) & / Sinon pathtmp = pathtmp & patharr(I) & / cpath = Gauche(chemintmp, Len(chemintmp) - 1) Si ce n'est pas FileObject.FolderExists (cpath), alors FileObject.CreateFolder cpath Suivant Définir FileObject = Rien Si Err.Number <> 0 Alors CréerDIR = Faux Err.Effacer Autre CréerDIR = Vrai Fin si Fonction de fin fonction GetfileExt (nom de fichier byval) fileExt_a=split(nom de fichier,.) GetfileExt=lcase(fileExt_a(ubound(fileExt_a))) fonction de fin '############## 'Comment obtenir le chemin virtuel '############# fonction getvirtual (str, chemin, urlhead) si left(str,7)=http:// alors URL = chaîne sinon si gauche(str,1)=/ alors start=instrRev(str,/) si début = 1 alors URL=/ autre url=gauche(str,début) finir si url=urlhead&url sinon si gauche(str,3)=../ alors str1=mid(str,inStrRev(str,../)+2) ar=split(str,../) lv=ubound(ar)+1 ar=split(chemin,/) URL=/ pour i=1 à (ubound(ar)-lv) url=url&ar(i) suivant URL=url&str1 url=urlhead&url autre url=urlhead&str finir si getvirtual=url fonction de fin |
'Exemple de code
faible chemin dl 'Créer un dossier pour stocker les données acquises virtuel=/downweb/ truepath=server.MapPath (virtuel) si requête(url)<> alors URL = demande (URL) fn=getFileName(url) urlhead=gauche(url,(instr(remplacer(url,//,),/)+1)) urlpath=replace(left(url,instrRev(url,/)),urlhead,) strContent = getHTTPPage(url) mystr=strContenu Définir objRegExp = Nouvelle expression rationnelle objRegExp.IgnoreCase = True objRegExp.Global = Vrai objRegExp.Pattern = (src|href)=.[^/>]+? Définir les correspondances =objRegExp.Execute(strContent) Pour chaque match dans les matchs str=Match.Valeur str=remplacer(str,src=,) str=remplacer(str,href=,) str=remplacer(str,,) str=remplacer(str,',) nom de fichier = GetfileName (str) getRet=getVirtual(str,urlpath,urlhead) temp=Remplacer(getRet,//,**) start=instr(temp,/) endt=instrRev(temp,/)-start+1 si début>0 alors repl=virtuel&mid(temp,start)& 'réponse.Écrire une réponse&<br> mystr=Remplacer(mystr,str,repl) dir=milieu(temp,début,fin) temp=truepath&Replace(dir,/,/) CréerDir(temp) réponse.Écrivez getRet&||&temp&filename&<br> réponse.Write a obtenu avec succès le fichier &filename&<br> réponse.Écrivez et enregistrez le &nom de fichier& dans &temp&<br><br> réponse.Écrire <HR> SaveToFile getRet, temp et nom de fichier finir si Suivant définir des correspondances = rien finir si %> |