ASP教程之用ASP编写下载网页中一切资本的程序
强大的可扩展性。ASP具有强大的扩展性,可以实现与多种网络、硬件设备的连接:通过专用的通讯线路远程接入企业;通过远程拨号服务器为远程拨号客户提供服务;通过WAP为移动电话互联网客户服务。程序|网页|下载|下载看过一篇关于下载网页中图片的文章,它只能下载以http头的图片,我做了些改善,能够下载网页中的一切毗连资本,并依照网页中的目次布局创建当地目次,寄存资本。download.asp?url=你要下载的网页
download.asp代码以下:
<%
Server.ScriptTimeout=9999
functionSaveToFile(from,tofile)
onerrorresumenext
dimgeturl,objStream,imgs
geturl=trim(from)
Mybyval=getHTTPstr(geturl)
SetobjStream=Server.CreateObject("ADODB.Stream")
objStream.Type=1
objStream.Open
objstream.writeMybyval
objstream.SaveToFiletofile,2
objstream.Close()
setobjstream=nothing
iferr.number<>0thenerr.Clear
endfunction
functiongeturlencodel(byvalurl)中文文件名转换
Dimi,code
geturlencodel=""
iftrim(Url)=""thenexitfunction
fori=1tolen(Url)
code=Asc(mid(Url,i,1))
ifcode<0Thencode=code+65536
Ifcode>255Then
geturlencodel=geturlencodel&"%"&Left(Hex(Code),2)&"%"&Right(Hex(Code),2)
else
geturlencodel=geturlencodel&mid(Url,i,1)
endif
next
endfunction
functiongetHTTPPage(url)
onerrorresumenext
dimhttp
sethttp=Server.createobject("Msxml2.XMLHTTP")
Http.open"GET",url,false
Http.send()
ifHttp.readystate<>4thenexitfunction
getHTTPPage=bytes2BSTR(Http.responseBody)
sethttp=nothing
iferr.number<>0thenerr.Clear
endfunction
Functionbytes2BSTR(vIn)
dimstrReturn
dimi,ThisCharCode,NextCharCode
strReturn=""
Fori=1ToLenB(vIn)
ThisCharCode=AscB(MidB(vIn,i,1))
IfThisCharCode<&H80Then
strReturn=strReturn&Chr(ThisCharCode)
Else
NextCharCode=AscB(MidB(vIn,i+1,1))
strReturn=strReturn&Chr(CLng(ThisCharCode)*&H100+CInt(NextCharCode))
i=i+1
EndIf
Next
bytes2BSTR=strReturn
EndFunction
functiongetFileName(byvalfilename)
ifinstr(filename,"/")>0then
fileExt_a=split(filename,"/")
getFileName=lcase(fileExt_a(ubound(fileExt_a)))
ifinstr(getFileName,"?")>0then
getFileName=left(getFileName,instr(getFileName,"?")-1)
endif
else
getFileName=filename
endif
endfunction
functiongetHTTPstr(url)
onerrorresumenext
dimhttp
sethttp=server.createobject("MSXML2.XMLHTTP")
Http.open"GET",url,false
Http.send()
ifHttp.readystate<>4thenexitfunction
getHTTPstr=Http.responseBody
sethttp=nothing
iferr.number<>0thenerr.Clear
endfunction
FunctionCreateDIR(ByValLocalPath)创建目次的程序,假如有多级目次,则一级一级的创立
OnErrorResumeNext
LocalPath=Replace(LocalPath,"","/")
SetFileObject=server.CreateObject("Scripting.FileSystemObject")
patharr=Split(LocalPath,"/")
path_level=UBound(patharr)
ForI=0Topath_level
IfI=0Thenpathtmp=patharr(0)&"/"Elsepathtmp=pathtmp&patharr(I)&"/"
cpath=Left(pathtmp,Len(pathtmp)-1)
IfNotFileObject.FolderExists(cpath)ThenFileObject.CreateFoldercpath
Next
SetFileObject=Nothing
IfErr.Number<>0Then
CreateDIR=False
Err.Clear
Else
CreateDIR=True
EndIf
EndFunction
functionGetfileExt(byvalfilename)
fileExt_a=split(filename,".")
GetfileExt=lcase(fileExt_a(ubound(fileExt_a)))
endfunction
functiongetvirtual(str,path,urlhead)
ifleft(str,7)="http://"then
url=str
elseifleft(str,1)="/"then
start=instrRev(str,"/")
ifstart=1then
url="/"
else
url=left(str,start)
endif
url=urlhead&url
elseifleft(str,3)="../"then
str1=mid(str,inStrRev(str,"../")+2)
ar=split(str,"../")
lv=ubound(ar)+1
ar=split(path,"/")
url="/"
fori=1to(ubound(ar)-lv)
url=url&ar(i)
next
url=url&str1
url=urlhead&url
else
url=urlhead&str
endif
getvirtual=url
endfunction
示例代码
dimdlpath
virtual="/downweb/"
truepath=server.MapPath(virtual)
ifrequest("url")<>""then
url=request("url")
fn=getFileName(url)
urlhead=left(url,(instr(replace(url,"//",""),"/")+1))
urlpath=replace(left(url,instrRev(url,"/")),urlhead,"")
strContent=getHTTPPage(url)
mystr=strContent
SetobjRegExp=NewRegexp
objRegExp.IgnoreCase=True
objRegExp.Global=True
objRegExp.Pattern="(src|href)=.[^>]+?"
SetMatches=objRegExp.Execute(strContent)
ForEachMatchinMatches
str=Match.Value
str=replace(str,"src=","")
str=replace(str,"href=","")
str=replace(str,"""","")
str=replace(str,"","")
filename=GetfileName(str)
getRet=getVirtual(str,urlpath,urlhead)
temp=Replace(getRet,"//","**")
start=instr(temp,"/")
endt=instrRev(temp,"/")-start+1
ifstart>0then
repl=virtual&mid(temp,start)&""
response.Writerepl&"<br>"
mystr=Replace(mystr,str,repl)
dir=</p>asp对于服务器的要求较高,一般的服务器如果访问量一大就垮了,不得不重启。 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。 作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。 以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。 学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点: ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。 在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。 还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。 接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。 Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
页:
[1]