원격 페이지의 모든 콘텐츠를 한 번에 다운로드
사용하려면 위의 코드를 downfile.asp와 같은 파일로 저장하세요.
브라우저에 다음을 입력하세요.
http://귀하의 주소/downfile.asp?url=http://www.baidu.com/index.html
<% '시간 초과 설정 Server.ScriptTimeout=9999 '############## '파일 저장 기능 '############# 함수 SaveToFile(from,tofile) 오류 발생 시 다음 재개 희미한 geturl,objStream,imgs geturl=트림(from) Mybyval=getHTTPstr(geturl) objStream = Server.CreateObject(ADODB.Stream) 설정 objStream.Type =1 objStream.Open objstream.write Mybyval objstream.SaveToFile tofile,2 objstream.Close() objstream=아무것도 설정하지 않음 err.number<>0이면 err.Clear 종료 기능 '############## '문자처리 대체 '############# 함수 geturlencodel(byval url)'중국어 파일 이름 변환 딤 아이,코드 geturlencodel= Trim(Url)=이면 함수를 종료합니다. i=1에서 len(Url)까지 코드=Asc(mid(Url,i,1)) 코드 <0이면 코드 = 코드 + 65536 코드>255이면 geturlencodel=geturlencodel&%&Left(Hex(코드),2)&%&Right(Hex(코드),2) 또 다른 geturlencodel=geturlencodel&mid(Url,i,1) 종료하면 다음 종료 기능 '############## '원격 페이지의 XML 획득이 시작됩니다. '############# 함수 getHTTPage(url) 오류 발생 시 다음 재개 희미한 http http=Server.createobject(Msxml2.XMLHTTP)를 설정합니다. Http.open GET,URL,false Http.send() Http.readystate<>4이면 함수를 종료합니다. getHTTPPage=bytes2BSTR(Http.responseBody) http=아무것도 설정하지 않음 err.number<>0이면 err.Clear 종료 기능 함수 bytes2BSTR(vIn) 희미한 strReturn 희미한 i,ThisCharCode,NextCharCode strReturn = i = 1의 경우 LenB(vIn) ThisCharCode = AscB(MidB(vIn,i,1)) ThisCharCode < &H80이면 strReturn = strReturn & Chr(ThisCharCode) 또 다른 NextCharCode = AscB(MidB(vIn,i+1,1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) 나는 = 나는 + 1 종료 조건 다음 bytes2BSTR = strReturn 기능 종료 '############## '원격 페이지의 XML 획득이 종료됩니다. 이 섹션은 모든 도둑 프로그램에 공통됩니다. '############# '############## '주소를 분해하여 파일명을 얻는다 '############# 함수 getFileName(byval 파일 이름) instr(filename,/)>0이면 fileExt_a=분할(파일 이름,/) getFileName=lcase(fileExt_a(ubound(fileExt_a))) instr(getFileName,?)>0이면 getFileName=left(getFileName,instr(getFileName,?)-1) 종료하면 또 다른 getFileName=파일 이름 종료하면 종료 기능 '############## '원격 페이지 가져오기 기능 '############# 함수 getHTTPstr(url) 오류 발생 시 다음 재개 희미한 http http=server.createobject(MSXML2.XMLHTTP)를 설정합니다. Http.open GET,URL,false Http.send() Http.readystate<>4이면 함수를 종료합니다. getHTTPstr=Http.responseBody http=아무것도 설정하지 않음 err.number<>0이면 err.Clear 종료 기능 '############## 'FSO 처리 기능, 디렉토리 생성 '############# 함수 CreateDIR(ByVal LocalPath) '디렉토리를 생성하는 프로그램입니다. 디렉토리가 여러 레벨인 경우 하나씩 생성합니다. 오류 발생 시 다음 재개 LocalPath = 바꾸기(LocalPath, /, /) FileObject = server.CreateObject(Scripting.FileSystemObject) 설정 patharr = 분할(로컬 경로, /) path_level = UBound(patharr) I = 0인 경우 path_level로 I = 0이면 pathtmp = patharr(0) & / 그렇지 않으면 pathtmp = pathtmp & patharr(I) & / cpath = 왼쪽(경로tmp, Len(경로tmp) - 1) FileObject.FolderExists(cpath)가 아닌 경우 FileObject.CreateFolder cpath 다음 FileObject = 없음 설정 Err.Number <> 0이면 CreateDIR = 거짓 Err.Clear 또 다른 CreateDIR = 참 종료 조건 기능 종료 함수 GetfileExt(발행 파일명) fileExt_a=분할(파일명,.) GetfileExt=lcase(fileExt_a(ubound(fileExt_a))) 종료 기능 '############## '가상 경로를 얻는 방법 '############# 함수 getvirtual(str,경로,urlhead) left(str,7)=http://이면 URL=str elseif left(str,1)=/ 그런 다음 시작=instrRev(str,/) start=1이면 URL=/ 또 다른 url=왼쪽(str,시작) 종료하면 url=urlhead&url elseif left(str,3)=../ 그런 다음 str1=mid(str,inStrRev(str,../)+2) ar=분할(str,../) lv=유바운드(ar)+1 ar=분할(경로,/) URL=/ i=1에서 (ubound(ar)-lv)까지 url=url&ar(i) 다음 url=url&str1 url=urlhead&url 또 다른 url=urlhead&str 종료하면 getvirtual=url 종료 기능 |
'예제 코드
희미한 dlpath '수집한 데이터를 저장할 폴더를 생성합니다. 가상=/다운웹/ truepath=server.MapPath(가상) 요청(url)<>인 경우 url=요청(url) fn=getFileName(url) urlhead=left(url,(instr(replace(url,//,),/)+1)) urlpath=replace(왼쪽(url,instrRev(url,/)),urlhead,) strContent = getHTTPPage(url) mystr=strContent objRegExp = 새 Regexp 설정 objRegExp.IgnoreCase = 참 objRegExp.Global = 참 objRegExp.Pattern = (src|href)=.[^/>]+? 일치 항목 설정 =objRegExp.Execute(strContent) 경기의 각 경기에 대해 str=일치.값 str=대체(str,src=,) str=대체(str,href=,) str=대체(str,,) str=대체(str,',) 파일명=GetfileName(str) getRet=getVirtual(str,urlpath,urlhead) 임시=교체(getRet,//,**) 시작=instr(임시,/) endt=instrRev(임시,/)-시작+1 시작>0이면 repl=가상&중간(임시,시작)& '응답.repl 쓰기&<br> mystr=바꾸기(mystr,str,repl) dir=mid(임시,시작,끝) 임시=truepath&바꾸기(dir,/,/) CreateDir(임시) 응답.Write getRet&||&temp&filename&<br> response.Write가 &filename&<br> 파일을 성공적으로 가져왔습니다. 응답.&temp&에 &filename&을 쓰고 저장합니다.<br><br> 응답.쓰기 <HR> SaveToFile getRet,임시&파일 이름 종료하면 다음 일치 항목=아무것도 설정하지 않음 종료하면 %> |