Descargue todo el contenido en una página remota a la vez
Para usarlo, guarde el código anterior como un archivo como: downfile.asp
Escribe en tu navegador:
http://su dirección/downfile.asp?url=http://www.baidu.com/index.html
<% 'Establecer el tiempo de espera Servidor.ScriptTimeout=9999 '############## 'Función para guardar archivos '############# función GuardarEnArchivo(desde,alarchivo) en caso de error reanudar siguiente geturl tenue,objStream,imgs geturl=recortar(de) Mybyval=getHTTPstr(geturl) Establecer objStream = Server.CreateObject(ADODB.Stream) objStream.Tipo =1 objStream.Open objstream.escribir Mybyval objstream.SaveToFile afile,2 objstream.Cerrar() establecer objstream = nada si err.number<>0 entonces err.Clear función final '############## 'Reemplazo de procesamiento de caracteres '############# función geturlencodel(byval url)'conversión de nombre de archivo chino I tenue, código geturlencodel= si trim(Url)= entonces salga de la función para i=1 a len(URL) código=Asc(mid(Url,i,1)) si código<0 Entonces código = código + 65536 Si código>255 Entonces geturlencodel=geturlencodel&%&Izquierda(Hexadecimal(Código),2)&%&Derecha(Hexadecimal(Código),2) demás geturlencodel=geturlencodel&mid(Url,i,1) terminar si próximo función final '############## 'Se inicia la adquisición XML de la página remota '############# función getHTTPage(url) en caso de error reanudar siguiente http oscuro establecer http=Servidor.createobject(Msxml2.XMLHTTP) Http.open OBTENER,url,falso http.enviar() si Http.readystate<>4 entonces salga de la función getHTTPPage=bytes2BSTR(Http.responseBody) establecer http=nada si err.number<>0 entonces err.Clear función final Función bytes2BSTR(vIn) dim strReturn tenue i, este código de carácter, siguiente código de carácter strRetorno = Para i = 1 a LenB(vIn) ThisCharCode = AscB(MidB(vIn,i,1)) Si ThisCharCode < & H80 Entonces strReturn = strReturn & Chr(ThisCharCode) Demás NextCharCode = AscB(MidB(vIn,i+1,1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) yo = yo + 1 Terminar si Próximo bytes2BSTR = strReturn Función final '############## 'Finaliza la adquisición XML de la página remota. Esta sección es común a todos los programas de ladrones. '############# '############## 'Descomponer la dirección y obtener el nombre del archivo '############# función getFileName (nombre de archivo byval) si instr(nombre de archivo,/)>0 entonces fileExt_a=split(nombre de archivo,/) getFileName=lcase(archivoExt_a(ubound(archivoExt_a))) si instr(getFileName,?)>0 entonces getFileName=left(getFileName,instr(getFileName,?)-1) terminar si demás getFileName=nombre de archivo terminar si función final '############## 'Obtener función de página remota '############# función getHTTPstr(url) en caso de error reanudar siguiente http oscuro establecer http=servidor.createobject(MSXML2.XMLHTTP) Http.open OBTENER,url,falso http.enviar() si Http.readystate<>4 entonces salga de la función getHTTPstr=Http.responseBody establecer http=nada si err.number<>0 entonces err.Clear función final '############## 'Función de procesamiento FSO, crear directorio '############# Función CreateDIR(ByVal LocalPath) 'Programa para crear un directorio. Si hay varios niveles de directorios, créelos uno por uno. En caso de error Continuar siguiente RutaLocal = Reemplazar(RutaLocal, /, /) Establecer FileObject = servidor.CreateObject(Scripting.FileSystemObject) patharr = Dividir(RutaLocal, /) nivel_ruta = UBound(rutarr) Para I = 0 Para path_level Si I = 0 Entonces pathtmp = patharr(0) & / De lo contrario pathtmp = pathtmp & patharr(I) & / rutac = Izquierda(rutatmp, Len(rutatmp) - 1) Si no es FileObject.FolderExists (cpath), entonces FileObject.CreateFolder cpath Próximo Establecer FileObject = Nada Si Número de error <> 0 Entonces CrearDIR = Falso Err.Borrar Demás CrearDIR = Verdadero Terminar si Función final función GetfileExt (nombre de archivo byval) fileExt_a=split(nombre de archivo,.) GetfileExt=lcase(archivoExt_a(ubound(archivoExt_a))) función final '############## 'Cómo obtener el camino virtual '############# función getvirtual(cadena,ruta,encabezado de URL) si left(str,7)=http:// entonces url=cadena elseif left(str,1)=/ entonces inicio=instrRev(cadena,/) si inicio = 1 entonces URL=/ demás url=izquierda(cadena,inicio) terminar si URL = encabezado de URL y URL elseif left(str,3)=../ entonces str1=mid(cadena,inStrRev(cadena,../)+2) ar=dividir(cadena,../) lv=ubound(ar)+1 ar=dividir(ruta,/) URL=/ para i=1 a (ubound(ar)-lv) url=url&ar(i) próximo URL=URL&cadena1 URL = encabezado de URL y URL demás url=encabezado de URL&cadena terminar si obtenervirtual=url función final |
'Código de ejemplo
dlpath tenue 'Crear una carpeta para almacenar los datos adquiridos virtual=/downweb/ truepath=servidor.MapPath(virtual) si solicitud (url) <> entonces URL=solicitud(URL) fn=obtenerNombreArchivo(url) URLhead=izquierda(url,(instr(reemplazar(url,//,),/)+1)) rutaurl=reemplazar(left(url,instrRev(url,/)),urlhead,) strContenido = getHTTPPage(url) mystr=strContenido Establecer objRegExp = Nueva expresión regular objRegExp.IgnoreCase = Verdadero objRegExp.Global = Verdadero objRegExp.Pattern = (src|href)=.[^/>]+? Establecer coincidencias =objRegExp.Execute(strContent) Para cada partido en partidos str=Coincidencia.Valor cadena=reemplazar(cadena,src=,) cadena=reemplazar(cadena,href=,) cadena=reemplazar(cadena,,) cadena=reemplazar(cadena,',) nombre de archivo = Obtener nombre de archivo (cadena) getRet=getVirtual(cadena,rutaurl,cabezaurl) temp=Reemplazar(getRet,//,**) inicio=instr(temp,/) endt=instrRev(temp,/)-inicio+1 si inicio>0 entonces repl=virtual&mid(temp,inicio)& 'respuesta.Escribir respuesta&<br> mystr=Reemplazar(mystr,str,repl) dir=medio(temp,inicio,endt) temp=rutaverdadera&Reemplazar(dir,/,/) CrearDir(temp) respuesta.Escribir getRet&||&temp&filename&<br> respuesta.Escribir obtuvo con éxito el archivo &nombre de archivo&<br> respuesta.Escribe y guarda &nombre de archivo& en &temp&<br><br> respuesta.Escribir <HR> SaveToFile getRet,temp y nombre de archivo terminar si Próximo establecer coincidencias = nada terminar si %> |