ASP编程:进修ASP:献给进修小偷程序的伴侣
asp可以轻松地实现对页面内容的动态控制,根据不同的浏览者,显示不同的页面内容。而浏览者一点觉察不出来,就像为他专门制作的页面一样。使用各种各样的组件,asp可以完成无比强大的功能。程序|小偷程序 好久没写过器材了,明天看了chinahuman的《用asp主动剖析网页中的图片地点,并将其保留到当地服务器》,因而优化了这个程序,而且将一切的功效都函数化了,但愿对进修XMLHTTP的伴侣有所匡助。程序完成功效:主动将远程页面的文件中的图片下载到当地。
<%
将本文保留为save2local.asp
测试:save2local.asp?url=http://ent.sina.com.cn/s/m/2003-11-11/1411231388.html
本文依据chinahuman的《用asp主动剖析网页中的图片地点,并将其保留到当地服务器》改编和优化
主动创立目次,主动将原文件名改名,文件格局的限定和其他功效的一些优化
主动保留网页文件中http://....;格局的图片到当地
转载请说明出处:http://www.jaron.cn;http://www.csdn.net/develop;
参数设置入手下手
url=request("url")
localaddr=server.MapPath("images_remote/")保留到当地的目次
localdir="images_remote/"http会见的绝对路径
AllowFileExt="jpg|bmp|png|gif"撑持的文件名格局
参数设置终了
ifcreatedir(localaddr)=falsethen
response.Write"创立目次失利,请反省目次权限"
response.End
endif
response.WriteConvert2LocalAddr(url,localaddr,localdir)
functionConvert2LocalAddr(url,localaddr,localdir)
参数申明
url页面地点
localaddr保留当地的物理地点
localdir绝对路径
strContent=getHTTPPage(url)
SetobjRegExp=NewRegexp
objRegExp.IgnoreCase=True
objRegExp.Global=True
objRegExp.Pattern="<img.+?>"
SetMatches=objRegExp.Execute(strContent)
ForEachMatchinMatches
RetStr=RetStr&GetRemoteImages(Match.value)
Next
ImagesArray=split(RetStr,"||")
RemoteImage=""
LocalImage=""
fori=1toubound(ImagesArray)
ifImagesArray(i)""andinstr(RemoteImage,ImagesArray(i))<1then
fname=baseurl&cstr(i&mid(ImagesArray(i),instrrev(ImagesArray(i),".")))
ImagesFileName=ImagesArray(i)
AllowFileExtArray=split(AllowFileExt,"|")
isGetFile=false
fortmp=0toubound(AllowFileExtArray)
iflcase(GetFileExt(ImagesFileName))=ALlowFileExtArray(tmp)then
isGetFile=True
endif
next
ifisGetFile=truethen
newfilename=GenerateRandomFileName(fname)
callSave2Local(ImagesFileName,localaddr&"/"&newfilename)
RemoteImage=RemoteImage&"||"&ImagesFileName
LocalImage=LocalImage&"||"&localdir&newfilename
endif
endif
next
arrnew=split(LocalImage,"||")
arrall=split(RemoteImage,"||")
fori=1toubound(arrnew)
strContent=replace(strContent,arrall(i),arrnew(i))
next
Convert2LocalAddr=strContent
endfunction
functionGetRemoteImages(str)
SetobjRegExp1=NewRegexp
objRegExp1.IgnoreCase=True
objRegExp1.Global=True
objRegExp1.Pattern="http://.+?;"
setmm=objRegExp1.Execute(str)
ForEachMatch1inmm
tmpaddr=left(Match1.value,len(Match1.value)-1)
GetRemoteImages=GetRemoteImages&"||"&replace(replace(tmpaddr,"""",""),"","")
next
endfunction
functiongetHTTPPage(url)
onerrorresumenext
dimhttp
sethttp=Server.createobject("Msxml2.XMLHTTP")
Http.open"GET",url,false
Http.send()
ifHttp.readystate4thenexitfunction
getHTTPPage=bytes2BSTR(Http.responseBody)
sethttp=nothing
iferr.number0thenerr.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
functiongetHTTPimg(url)
onerrorresumenext
dimhttp
sethttp=server.createobject("MSXML2.XMLHTTP")
Http.open"GET",url,false
Http.send()
ifHttp.readystate4thenexitfunction
getHTTPimg=Http.responseBody
sethttp=nothing
iferr.number0thenerr.Clear
endfunction
functionSave2Local(from,tofile)
dimgeturl,objStream,imgs
geturl=trim(from)
imgs=gethttpimg(geturl)
SetobjStream=Server.CreateObject("ADODB.Stream")
objStream.Type=1
objStream.Open
objstream.writeimgs
objstream.SaveToFiletofile,2
objstream.Close()
setobjstream=nothing
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
FunctionGenerateRandomFileName(ByValszFilename)依据原文件名,主动以日期YYYY-MM-DD-RANDOM格局天生新文件名
Randomize
ranNum=Int(90000*Rnd)+10000
IfMonth(Now)<10Thenc_month="0"&Month(Now)Elsec_month=Month(Now)
IfDay(Now)<10Thenc_day="0"&Day(Now)Elsec_day=Day(Now)
IfHour(Now)<10Thenc_hour="0"&Hour(Now)Elsec_hour=Hour(Now)
IfMinute(Now)<10Thenc_minute="0"&Minute(Now)Elsec_minute=Minute(Now)
IfSecond(Now)<10Thenc_second="0"&Second(Now)Elsec_second=Minute(Now)
fileExt_a=Split(szFilename,".")
FileExt=LCase(fileExt_a(UBound(fileExt_a)))
GenerateRandomFileName=Year(Now)&c_month&c_day&c_hour&c_minute&c_second&"_"&ranNum&"."&FileExt
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.Number0Then
CreateDIR=False
Err.Clear
Else
CreateDIR=True
EndIf
EndFunction
functionGetfileExt(byvalfilename)
fileExt_a=split(filename,".")
GetfileExt=lcase(fileExt_a(ubound(fileExt_a)))
endfunction
%>
有一点要注重的是,这里只是剖析了以http开首的图片的地点。不然不下载图片,能够转换一下地点就好了,再供应几个小函数,剖析地点用的:
Functionfindurl(thisurl)
ifthisurl""Then
findurl=""
strlen=InStr(8,thisurl,"/")
Ifstrlen=0Thenstrlen=1
findurl=Mid(thisurl,strlen,28)
endif
endFunction
functionfindurlpath(thisurl)
thisurl=replace(thisurl,"//","@@")
ary_tmp=split(thisurl,"/")
fortmp=0toubound(ary_tmp)
iftmp<ubound(ary_tmp)then
urltmp=urltmp&"/"&ary_tmp(tmp)
endif
next
urltmp=right(urltmp,len(urltmp)-1)
findurlpath=replace(urltmp,"@@","//")&"/"
endfunction
functionfindurlhost(thisurl)
thisurl=replace(thisurl,"//","@@")
ary_tmp=split(thisurl,"/")
urltmp=ary_tmp(0)
findurlhost=replace(urltmp,"@@","//")&"/"
findurlhost=left(findurlhost,len(findurlhost)-1)
endfunction
我想详细了解ASP整站代码与PSP整站代码有什么优缺点,那个更好,更安全,更用容易维护,和管理。。。 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。 另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件) 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。 Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名") 我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标. 跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
页:
[1]