リモート ページ上のすべてのコンテンツを一度にダウンロードする
使用するには、上記のコードを downfile.asp などのファイルとして保存します。
ブラウザに次のように入力します。
http://あなたのアドレス/downfile.asp?url=http://www.baidu.com/index.html
<% 'タイムアウトを設定します Server.ScriptTimeout=9999 「##############」 'ファイル保存機能 「###########」 関数 SaveToFile(from,tofile) エラー時は次から再開 dim geturl、objStream、imgs geturl=トリム(から) Mybyval=getHTTPstr(geturl) objStream = Server.CreateObject(ADODB.Stream) を設定します。 objStream.Type =1 objStream.Open objstream.write Mybyval objstream.SaveToFile tofile,2 objstream.Close() objstream = なしを設定します if err.number<>0 then err.Clear 終了関数 「##############」 '文字処理置換 「###########」 function geturlencodel(byval url)'中国語ファイル名変換 ディムアイ、コード 取得トゥレンコード= if trim(Url)= then exit 関数 for 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 set http=Server.createobject(Msxml2.XMLHTTP) Http.open GET,url,false Http.send() if Http.readystate<>4 then exit 関数 getHTTPPage=bytes2BSTR(Http.responseBody) http=何も設定しない if err.number<>0 then err.Clear 終了関数 関数 bytes2BSTR(vIn) dim strReturn dim i、ThisCharCode、NextCharCode strReturn = For i = 1 から LenB(vIn) ThisCharCode = AscB(MidB(vIn,i,1)) If ThisCharCode < &H80 then strReturn = strReturn & Chr(ThisCharCode) それ以外 NextCharCode = AscB(MidB(vIn,i+1,1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) i = i + 1 終了の場合 次 bytes2BSTR = strReturn 終了機能 「##############」 「リモート ページの XML 取得は終了します。このセクションはすべての泥棒プログラムに共通です。」 「###########」 「##############」 'アドレスを分解してファイル名を取得 「###########」 関数 getFileName(byval ファイル名) if instr(filename,/)>0 then fileExt_a=split(ファイル名,/) getFileName=lcase(fileExt_a(ubound(fileExt_a))) if instr(getFileName,?)>0 then getFileName=left(getFileName,instr(getFileName,?)-1) 終了する場合 それ以外 getFileName=ファイル名 終了する場合 終了関数 「##############」 'リモートページ関数の取得 「###########」 関数 getHTTPstr(url) エラー時は次から再開 薄暗いhttp set http=server.createobject(MSXML2.XMLHTTP) Http.open GET,url,false Http.send() if Http.readystate<>4 then exit 関数 getHTTPstr=Http.responseBody http=何も設定しない if err.number<>0 then err.Clear 終了関数 「##############」 'FSO処理関数、ディレクトリ作成 「###########」 Function CreateDIR(ByVal LocalPath) ' ディレクトリを作成するプログラム。ディレクトリが複数ある場合は、1 つずつ作成します。 エラー時は次へ再開 LocalPath = Replace(LocalPath, /, /) FileObject =server.CreateObject(Scripting.FileSystemObject) を設定します。 patharr = Split(LocalPath, /) path_level = UBound(patharr) I = 0 の場合 path_level へ I = 0 の場合、 pathtmp = patharr(0) & / それ以外の場合、 pathtmp = pathtmp & patharr(I) & / cpath = Left(pathtmp, Len(pathtmp) - 1) FileObject.FolderExists(cpath) でない場合は、FileObject.CreateFolder cpath 次 FileObject = なしを設定します Err.Number <> 0 の場合、次に CreateDIR = False エラークリア それ以外 CreateDIR = True 終了の場合 終了機能 関数 GetfileExt(byval ファイル名) fileExt_a=split(ファイル名,.) GetfileExt=lcase(fileExt_a(ubound(fileExt_a))) 終了関数 「##############」 '仮想パスの取得方法 「###########」 関数 getvirtual(str,path,urlhead) left(str,7)=http:// の場合 URL=文字列 elseif left(str,1)=/ then start=instrRev(str,/) 開始=1の場合 URL=/ それ以外 url=left(str,start) 終了する場合 URL=URLヘッド&URL elseif left(str,3)=../ then str1=mid(str,inStrRev(str,../)+2) ar=split(str,../) lv=ubound(ar)+1 ar=split(パス,/) URL=/ for i=1 から (ubound(ar)-lv) URL=URL&AR(i) 次 URL=URL&str1 URL=URLヘッド&URL それ以外 URL=urlhead&str 終了する場合 getvirtual=url 終了関数 |
'コード例
ディム dlpath '取得したデータを保存するフォルダーを作成します 仮想=/ダウンウェブ/ truepath=サーバー.マップパス(仮想) if request(url)<> then URL=リクエスト(URL) fn=getファイル名(url) urlhead=left(url,(instr(replace(url,//,),/)+1)) urlpath=replace(left(url,instrRev(url,/)),urlhead,) strContent = getHTTPPage(url) mystr=strContent objRegExp = 新しい正規表現を設定します objRegExp.IgnoreCase = True objRegExp.Global = True objRegExp.Pattern = (src|href)=.[^/>]+? 一致を設定 =objRegExp.Execute(strContent) 試合中の各試合について str=一致値 str=replace(str,src=,) str=replace(str,href=,) str=置換(str,,) str=replace(str,',) ファイル名=GetfileName(str) getRet=getVirtual(str,urlpath,urlhead) temp=Replace(getRet,//,**) start=instr(temp,/) endt=instrRev(temp,/)-start+1 開始>0の場合 repl=virtual&mid(temp,start)& 'response.Write repl&<br> mystr=置換(mystr,str,repl) dir=mid(温度,開始,終了) temp=truepath&Replace(dir,/,/) CreateDir(一時) response.Write getRet&||&temp&filename&<br> response.Write がファイル &filename& を正常に取得しました<br> 応答。&filename& を &temp& に書き込んで保存します。<br><br> 応答。<HR> を書き込みます SaveToFile getRet,temp&ファイル名 終了する場合 次 一致=なしを設定します 終了する場合 %> |