标签归档:stream

用ASP/VBScript获取文章列表

< %
'ASP获取文章列表
function getHTTPPage(url)  
	dim Http  
	set Http=server.createobject("MSXML2.XMLHTTP")  
	Http.open "GET",url,false  
	Http.send()  
	if Http.readystate<>4 then  
		exit function  
	end if  
	getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")  
	set http=nothing  
	if err.number<>0 then err.Clear  
end function  
 
Function BytesToBstr(body,Cset)  
	dim objstream  
	set objstream = Server.CreateObject("adodb.stream")  
	objstream.Type = 1  
	objstream.Mode =3  
	objstream.Open  
	objstream.Write body  
	objstream.Position = 0  
	objstream.Type = 2  
	objstream.Charset = Cset  
	BytesToBstr = objstream.ReadText  
	objstream.Close  
	set objstream = nothing  
End Function  
 
Function ZZ(ustr,uexp)
	Set regEx=New RegExp
	regEx.Pattern=uexp
	regEx.IgnoreCase=True
	regEx.Global=True
	Set ZZ=regEx.Execute(ustr)
End Function
 
Sub Echo(t)
	response.write t&"<br />"&vbcrlf
End Sub
 
Sub getall(url,xurl,uri)
	Html = getHTTPPage(uri&Url)
	set Rs=ZZ(html,"("&xurl&"?.*)[#""].*>(.*)< \/a")
	for each uurl in Rs
		'echo uri&replace(uurl,"""","")
		Set oMacs=uurl
		echo uri&oMacs.SubMatches(0)&"|"&oMacs.SubMatches(1)
	next
End Sub
 
urls=split("ftgb|ftlg|zykt","|")
xurls=split("ftgbxx|ftlgxx|zyktcpxx","|")
for i=0 to ubound(urls)
	getall urls(i)&".jsp",xurls(i)&".jsp","http://gree.com.cn/gree_product/"
next
%>

下边发个VBscript版本的

'VBScript获取文章列表
function getHTTPPage(url)  
	dim Http  
	set Http=createobject("MSXML2.XMLHTTP")  
	Http.open "GET",url,false  
	Http.send()  
	if Http.readystate<>4 then  
		exit function  
	end if  
	getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")  
	set http=nothing  
	if err.number<>0 then err.Clear  
end function  
 
Function BytesToBstr(body,Cset)  
	dim objstream  
	set objstream = CreateObject("adodb.stream")  
	objstream.Type = 1  
	objstream.Mode =3  
	objstream.Open  
	objstream.Write body  
	objstream.Position = 0  
	objstream.Type = 2  
	objstream.Charset = Cset  
	BytesToBstr = objstream.ReadText  
	objstream.Close  
	set objstream = nothing  
End Function 
 
Function ZZ(ustr,uexp)
	Set regEx=New RegExp
	regEx.Pattern=uexp
	regEx.IgnoreCase=True
	regEx.Global=True
	Set ZZ=regEx.Execute(ustr)
End Function
 
Sub Echo(t)
	Wscript.echo t
End Sub
 
Sub getall(url,xurl,uri)
	Html = getHTTPPage(uri&Url)
	set Rs=ZZ(html,"("&xurl&"?.*)[#""].*>(.*)< \/a")
	for each uurl in Rs
		'echo uri&replace(uurl,"""","")
		Set oMacs=uurl
		echo uri&oMacs.SubMatches(0)&"|"&oMacs.SubMatches(1)
	next
End Sub
 
urls=split("ftgb|ftlg|zykt","|")
xurls=split("ftgbxx|ftlgxx|zyktcpxx","|")
for i=0 to ubound(urls)
	getall urls(i)&".jsp",xurls(i)&".jsp","http://gree.com.cn/gree_product/"
next

用到了正则表达式,令以前收藏的一个正则表达式教程分享给代价

ASP使用BinaryWrite与Adodb.Stream实现下载

因为某种原因要实现一个RAR的文件的下载,而且为了节省服务器资源,需要做一个判断,下载引用方法如下:

   	<input type="button" value="下载工具包" onclick="location.href='http-localhost-api?/easywork-imageupload-client-full/download/port-80/ver=<%=date%/>.gzip.rar';">
   	<input type="button" value="下载升级包" onclick="location.href='http-localhost-api?/easywork-imageupload-client-fast/download/port-80/ver=<%=date%/>.gzip.rar';">

初步打算用FSO读取为TextStream,然后用BinaryWrite输出,代码如下:

< %@codepage=65001%>
< %
response.buffer=false
if session("safe_mode")<>"ok" then response.write "<form action=""../../../admin.asp"" method=""post"" id=""a""><script type=""text/javascript"">document.getElementById(""a"").submit();</script>":response.end
if instr(request.Querystring,"/")< =0 then response.redirect "/":response.end
set fso=server.createobject("Scripting.FileSystemObject")
file=server.mappath(split(request.QueryString,"/")(1)&".rar")
if not fso.fileexists(file) then response.redirect "/":response.end
set fto=fso.getfile(file)
set fts=fto.OpenAsTextStream(1,-1)
 
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition","attachment;filename="&split(request.QueryString,"/")(1)&".rar"
 
response.binarywrite fts.readall
%>
</form>

实际运行时速度不是很快,可能是fts.readall的原因吧,于是修改一下代码,一行一行的输出:

< %@codepage=936%>
< %
response.buffer=false
if session("safe_mode")<>"ok" then response.write "<form action=""../../../admin.asp"" method=""post"" id=""a""><script type=""text/javascript"">document.getElementById(""a"").submit();</script>":response.end
if instr(request.Querystring,"/")< =0 then response.redirect "/":response.end
set fso=server.createobject("Scripting.FileSystemObject")
file=server.mappath(split(request.QueryString,"/")(1)&".rar")
if not fso.fileexists(file) then response.redirect "/":response.end
set fto=fso.getfile(file)
set fts=fto.OpenAsTextStream(1,-1)
 
 
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition","attachment;filename="&split(request.QueryString,"/")(1)&".rar"
do while not fts.atendofstream
	response.binarywrite fts.readall
loop
%>
</form>

效率有所提高,因为FSO每次读取硬盘,速度很慢~到网上搜索了一下,发现Adodb中除了Connection和Recordset,还有一个Stream,于是有了第三种方法:

< %@codepage=65001%>
< %
response.buffer=false
if session("safe_mode")<>"ok" then response.write "<form action=""../../../admin.asp"" method=""post"" id=""a""><script type=""text/javascript"">document.getElementById(""a"").submit();</script>":response.end
if instr(request.Querystring,"/")< =0 then response.redirect "/":response.end
set fso=server.createobject("Scripting.FileSystemObject")
file=server.mappath(split(request.QueryString,"/")(1)&".rar")
if not fso.fileexists(file) then response.redirect "/":response.end
 
Response.ContentType = "application/octet-stream"
Response.AddHeader "Content-Disposition","attachment;filename="&now&".rar"
 
Set Ados=Server.CreateObject("Adodb.Stream")
Ados.Mode=3
Ados.Type=1
Ados.Open
Ados.LoadFromFile(Server.mappath(split(request.QueryString,"/")(1)&".rar"))
 
response.binarywrite Ados.read()
%>
</form>

速度已经不错了,同时很多人访问CPU占用也不是很高。