利用ASP程序实现将远程页面的所有内容下载到本地

程序|下载|页面

  以前发过一个东西,是将远程的内容,按浏览器输入后,将它转为二进制流下载到本地,但局限性比较多,这个代码可以将远程页面的所有内容,包括远程服务器的CSS,JS,JPG,Gif,第一层下面的页面,swf,等等...

  代码的使用:

  将下面的代码保存为downfile.asp放到你的站点一个目录下,然后在那个目录里面建立一个叫downfile的文件夹,所有得到的内容都将保存在downfile文件夹里。

  在浏览器中输入

  http://你的地址/downfile.asp?url=http://www.baidu.com/index.html

  那么就将百度首页的所有文件都下载到本地的那个叫downfile的文件夹中..

  这个代码比你的手工OE可要舒服多了,而且会将获取的文件,按照原来远程的路径,建立文件夹,分类别保存文件..

<%
'####################
'代码的主体函数部分均源自于网络
'####################
'设置超时的时间
Server.ScriptTimeout=9999
'##############
'文件保存函数
'#############
function SaveToFile(from,tofile)
on error resume next
dim geturl,objStream,imgs
geturl=trim(from)
Mybyval=getHTTPstr(geturl)
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type =1
objStream.Open
objstream.write Mybyval
objstream.SaveToFile tofile,2
objstream.Close()
set objstream=nothing
if err.number<>0 then err.Clear
end function  

'##############
'字符处理替换
'#############
function geturlencodel(byval url)'中文文件名转换
Dim i,code
geturlencodel=""
if trim(Url)="" then exit function
for i=1 to len(Url)
code=Asc(mid(Url,i,1))
if code<0 Then code = code + 65536
If code>255 Then
geturlencodel=geturlencodel&"%"&Left(Hex(Code),2)&"%"&Right(Hex(Code),2)
else
geturlencodel=geturlencodel&mid(Url,i,1)
end if
next
end function
'##############
'XML获取远程页面开始
'#############
function getHTTPPage(url)
on error resume next
dim http
set http=Server.createobject("Msxml2.XMLHTTP")
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then exit function
getHTTPPage=bytes2BSTR(Http.responseBody)
set http=nothing
if err.number<>0 then err.Clear
end function  

Function bytes2BSTR(vIn)
dim strReturn
dim i,ThisCharCode,NextCharCode
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
'##############
'XML获取远程页面结束,这段是小偷程序都通用的部分
'#############

'##############
'分解地址,取得文件名
'#############
function getFileName(byval filename)
if instr(filename,"/")>0 then
fileExt_a=split(filename,"/")
getFileName=lcase(fileExt_a(ubound(fileExt_a)))
if instr(getFileName,"?")>0 then
getFileName=left(getFileName,instr(getFileName,"?")-1)
end if
else
getFileName=filename
end if
end function  

'##############
'获取远程页面函数
'#############
function getHTTPstr(url)
on error resume next
dim http
set http=server.createobject("MSXML2.XMLHTTP")
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then exit function
getHTTPstr=Http.responseBody
set http=nothing
if err.number<>0 then err.Clear
end function  

'##############
'FSO处理函数,创建目录
'#############
Function CreateDIR(ByVal LocalPath) '建立目录的程序,如果有多级目录,则一级一级的创建
On Error Resume Next
LocalPath = Replace(LocalPath, "\", "/")
Set FileObject = server.CreateObject("Scripting.FileSystemObject")
patharr = Split(LocalPath, "/")
path_level = UBound(patharr)
For I = 0 To path_level
If I = 0 Then pathtmp = patharr(0) & "/" Else pathtmp = pathtmp & patharr(I) & "/"
cpath = Left(pathtmp, Len(pathtmp) - 1)
If Not FileObject.FolderExists(cpath) Then FileObject.CreateFolder cpath  

Next
Set FileObject = Nothing
If Err.Number <> 0 Then
CreateDIR = False
Err.Clear
Else
CreateDIR = True
End If
End Function

function GetfileExt(byval filename)
fileExt_a=split(filename,".")
GetfileExt=lcase(fileExt_a(ubound(fileExt_a)))
end function

'##############
'如何获取虚拟的路径
'#############
function getvirtual(str,path,urlhead)
if left(str,7)="http://" then
url=str
elseif left(str,1)="/" then
start=instrRev(str,"/")
if start=1 then
url="/"
else
url=left(str,start)
end if
url=urlhead&url
elseif left(str,3)="../" then
str1=mid(str,inStrRev(str,"../")+2)
ar=split(str,"../")
lv=ubound(ar)+1
ar=split(path,"/")
url="/"
for i=1 to (ubound(ar)-lv)
url=url&ar(i)
next
url=url&str1
url=urlhead&url
else
url=urlhead&str
end if
getvirtual=url
end function

'下面是示范性的代码
dim dlpath
'建立一个文件夹,以便存放这些获取的数据
virtual="/downfile/"
truepath=server.MapPath(virtual)

if request("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
Set objRegExp = New Regexp
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = "(src|href)=.[^\>]+? "
Set Matches =objRegExp.Execute(strContent)
For Each Match in Matches
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
if start>0 then
repl=virtual&mid(temp,start)&" "
'response.Write repl&"<br>"
mystr=Replace(mystr,str,repl)

dir=mid(temp,start,endt)
temp=truepath&Replace(dir,"/","\")
CreateDir(temp)
response.Write getRet&"||"&temp&filename&"<br>"
response.Write "成功取得"&filename&"这个文件<br>"
response.Write "并将"&filename&"保存在"&temp&"<br><br>"
response.Write "<HR>"
SaveToFile getRet,temp&filename
end if
Next
set Matches=nothing
else
response.write "请输入一个地址!"
end if
%>

时间: 2024-12-26 22:54:39

利用ASP程序实现将远程页面的所有内容下载到本地的相关文章

利用Asp.net Ajax异步获取xml文档内容

ajax|asp.net|xml|异步 Ajax原意本是让人利用异步获取XML内容,以实现无刷新的网页效果asp.net ajax已将底层内容封装实现起来远比自写xmlhttp来的方便,至少浏览器兼容方面要强得很多下面以一个www.asp.net的示例说明一下利用microsoft ajax library来简单异步获取xml文档的方法 // 返回XML的Web 请求function OnSucceededXml(executor, eventArgs) ...{    if (executor

ASP程序漏洞解析及黑客入侵防范方法

程序 如何更好的达到防范黑客攻击,本人提一下个人意见!第一,免费程序不要真的就免费用,既然你可以共享原码,那么攻击者一样可以分析代码.如果在细节上注意防范,那样你站点的安全性就大大的提高了.即使出现了SQL Injection这样的漏洞,攻击者也不可能马上拿下你的站点. 由于ASP的方便易用,越来越多的网站后台程序都使用ASP脚本语言.但是, 由于ASP本身存在一些安全漏洞,稍不小心就会给黑客提供可乘之机.事实上,安全不仅是网管的事,编程人员也必须在某些安全细节上注意,养成良好的安全习惯,否则会

用ASP让用户访问指定页面

一个网站有许多页面,如果用户知道某个页面的链接,可以在浏览器中直接输入url访问它.但这在一个要求有安全性的站点上是不允许的.我们要求用户必须登录以后才能访问各级页面,有时也确实希望用户总是先看到站点的主页.这两种要求可以通过在asp的global.asa中对session对象编程来实现. 1.用户必须从主页开始浏览 如果仅希望用户每次上站都先访问站点主页,可以在session的session_onstart事件中加入response.redirect "url"来实现.例如在glob

利用ASP.NET技术动态生成HTML页面

思路 1.利用如Dw-Mx这样的工具生成html格式的模板,在需要添加格式的地方加入特殊标记(如$htmlformat$),动态生成文件时利用代码读取此模板,然后获得前台输入的内容,添加到此模板的标记位置中,生成新文件名后写入磁盘,写入后再向数据库中写入相关数据. 2.使用后台代码硬编码Html文件,可以使用HtmlTextWriter类来写html文件. 优点 1.可以建立非常复杂的页面,利用包含js文件的方法,在js文件内加入document.write()方法可以在所有页面内加入如页面头,

利用ASP.NET技术动态生成HTML页面_ASP.NET

思路 1. 利用如Dw-Mx这样的工具生成html格式的模板,在需要添加格式的地方加入特殊标记(如$htmlformat$),动态生成文件时利用代码读取此模板,然后获得前台输入的内容,添加到此模板的标记位置中,生成新文件名后写入磁盘,写入后再向数据库中写入相关数据. 2. 使用后台代码硬编码Html文件,可以使用HtmlTextWriter类来写html文件. 优点 1. 可以建立非常复杂的页面,利用包含js文件的方法,在js文件内加入document.write()方法可以在所有页面内加入如页

ASP分页列表生成静态页面的小程序脚本

程序|分页|脚本|静态|页面 <!--#include file="conn.asp"--><html><head><TITLE>分页测试</TITLE><LINK href="inc/style.css" type=text/css rel=stylesheet></head><%strHead=strHead&"<html>"strH

利用ASP远程获取内容

'----------远程获取内容,并将内容存在本地电脑上,包括任何文件!----------'---------------利用xmlhttp和adodb.stream,酷!绝对原创!-----------------'On Error Resume Next'Set the content type to the specific type that you are sending.'Response.ContentType = "IMAGE/JPEG"'-------------

开发连接远程SQL Server 的ASP程序应注意的问题

Microsoft SQL Server7.0是一种大型.分布式数据库系统,也可被认为是一种大型.分布式数据仓库.由于其与Windows NT和BackOffice以及Visual Studio具有紧密的配合,已被越来越多的网络应用系统所采用.而ASP程序也以其和NT的紧密连接,可使用ActiveX对象.CGI接口对象化等特点向CGI程序发起了有力的挑战.下面,就谈谈开发连接远程SQL Server 的ASP程序应注意的几个问题. SQL Server是一个十分注重安全性的数据库,特别是在7.0

利用ASP技术开发基于WWW的数据库检索程序

程序|数据|数据库  ASP是微软公司推出的用以取代CGI的新技术,是目前公认的建立Windows NT动态站点最好的工具.它与ADO(Active Data Object,一种新的数据访问模型)的充分结合,提供了强大的数据库访问功能,使之成为进行网上数据库管理的重要手段.     一.ASP简介   ASP内含于Internet Information Server(简称IIS3.0)中,扩展名以.asp表示.ASP文件可以用常规的文本编辑器编辑,也可以利用专门的辅助开发工具InterDev进