小偷&小偷入库&采集入库
程序员文章站
2022-06-05 09:12:21
xmlhttp应用参考 一、使用步骤: 1、创建xmlhttp对象 //需msxml4.0支持 2、打开与服务端的连接,同时定...
xmlhttp应用参考
一、使用步骤:
1、创建xmlhttp对象 //需msxml4.0支持
2、打开与服务端的连接,同时定义指令发送方式,服务网页(url)和请求权限等。客户端通过open命令打开与服务端的服务网页的连接。与普通http指令传送一样,可以用"get"方法或"post"方法指向服务端的服务网页。
3、发送指令。
4、等待并接收服务端返回的处理结果。
5、释放xmlhttp对象
二、xmlhttp方法:
1、xmlhttp对象
备注:客户机可以使用xmlhttp对象发送任意的http请求,接受http应答,还可以对应答的xml文档进行解析。
open方法:初始化一个msxml2.xmlhttp请求,指定http请求方式、url以及鉴定信息。
open( bstrmethod, bstrurl, varasync, bstruser, bstrpassword )
bstrmethod: 数据传送方式,即get或post。
bstrurl: 服务网页的url。
varasync: 是否同步执行。缺省为true,即同步执行,但只能在dom中实施同步执行。用中一般将其置为false,即异步执行。
bstruser: 用户名,可省略。
bstrpassword:用户口令,可省略。
send方法:发送http请求到服务器,返回应答。
语法:
oxmlhttprequest.send(varbody)
说明:此方法是否同步取决于open方法的varasync参数。如果设为true则为同步,调用立刻返回,如果设为false调用直到整个应答被接收了才返回。
setrequestheader( bstrheader, bstrvalue )
bstrheader:http 头(header)
bstrvalue: http 头(header)的值
如果open方法定义为post,可以定义表单方式上传:
xmlhttp.setrequestheader( "content-type", "application/x-www-form-urlencoded")
三、xmlhttp属性:
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在dom中调用。
responsebody: 结果返回为无符号整数数组。
responsestream: 结果返回为istream流。
responsetext : 结果返回为字符串。
responsexml: 结果返回为xml格式数据。
四、示例:
< script language="javascript" >
function getdatal(url){
var xmlhttp = new activexobject("msxml2.xmlhttp.4.0";//创建xmlhttprequest对象,需msxml4.0支持 ["msxml2.xmlhttp.4.0","msxml2.domdocument.4.0"]
xmlhttp.open("get",url,false,"",""; //使用http get初始化http请求
xmlhttp.send(""; //发送http请求并获取http响应
return xmlhttp.responsexml; //获取xml文档
}
< /script >
现在网上流行的小偷程序比较多,有新闻类小偷,音乐小偷,下载小偷,那么它们是如何做的呢,下面我来做个简单介绍,希望对各位站长有所帮助。
(一)原理
小偷程序实际上是通过了xml中的xmlhttp组件调用其它网站上的网页。比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤。用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应修改;速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。
(二)事例
下面就xmlhttp在asp中的应用做个简单说明
代码: <%
'常用函数
'1、输入url目标网页地址,返回值gethttppage是目标网页的html代码
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
'2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换
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
'下面试着调用http://wmjie.51.net/swords的html内容
dim url,html
url="http://wmjie.51.net/swords/"
html = gethttppage(url)
response.write html
%>
------------------------------------------------------
代码:
'代码]用xmlhttp读取远程文件
<%
response.buffer = true
dim objxmlhttp, xml
set xml = server.createobject("microsoft.xmlhttp"
xml.open "get", "http://wmjie.51.net/swords/diary.rar", false
xml.send
' add a header to give it a file name:
response.addheader "content-disposition", _
"attachment;filename=mitchell-pres.zip"
' specify the content type to tell the browser what to do:
response.contenttype = "application/zip"
' binarywrite the bytes to the browser
response.binarywrite xml.responsebody
set xml = nothing
%>
-------------------------------------
如何写asp入库小偷程序
入库小偷的原理也很简单:就是用xmlhttp远程读取网页的内容,然后根据需要,对读到的内容进行加工(过滤,替换,分类),最后得到自己需要的数据,加入到数据库中。
首先:我们先用xmlhttp读取远程网页(我的另一片文章中有介绍)。
其次:对内容进行过滤,这个是比较关键的步骤,比如说,我要从远程网页上提取出所有url连接,我应该怎么做呢?
代码:
‘这里用的是正则式
set objregexp = new regexp '建立对象
objregexp.ignorecase = true '大小写忽略
objregexp.global = true '全局为真
objregexp.pattern = "http://.+?" '匹配字段
set mm=objregexp.execute(str) '执行查找,str为输入参数
for each match in mm '进入循环
response.write(match.value) '输出url地址
next
然后,我们需要根据需要做一些替换功能,把不必要的数据替换掉,这个比较简单,用replace函数即可。
最后,进行数据库操作
-------------------------------
一个例子
代码:
<%
on error resume next
server.scripttimeout=9999999
function gethttppage(path)
t = getbody(path)
gethttppage=bytestobstr(t,"gb2312"
end function
'首先,进行小偷程序的一些初始化设置,以上代码的作用分别是忽略掉所有非致命性错误,把小偷程序的运行超时时间设置得很长(这样不会出现运行超时的错误),转换原来默认的utf-8编码转换成gb2312编码,否则直接用xmlhttp组件调用有中文字符的网页得到的将是乱码。
function getbody(url)
on error resume next
set retrieval = createobject("microsoft.xmlhttp"
with retrieval
.open "get", url, false, "", ""
.send
getbody = .responsebody
end with
set retrieval = nothing
end function
'然后调用xmlhttp组件创建一个对象并进行初始化设置。
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 newstring(wstr,strng)
newstring=instr(lcase(wstr),lcase(strng))
if newstring<=0 then newstring=len(wstr)
end function
'处理抓取回来的数据需要调用adodb.stream组件并进行初始化设置。%>
'以下即为页面显示部分
<%
dim wstr,str,url,start,over,city
'定义一些需要使用到的变量
city = request.querystring("id")
'程序传回的id变量(即用户选择的城市)赋给id
url="http://appnews.qq.com/cgi-bin/news_qq_search?city="&city&""
'这里设置需要抓取的页面地址,当然你也可以直接指定某个地址而不使用变量
wstr=gethttppage(url)
'获取指定页面的全部数据
start=newstring(wstr," <html>")
'这里设置需要处理的数据的头部,这个变量应视不同情况而设置,具体内容可以通过查看需要抓取的页面的源代码来确定。因为在这个程序里我们需要抓取整个页面,所以设置为页面全部抓取。注意,设置的内容必须是页面内容唯一的,不可以重复。
over=newstring(wstr," </html>")
'和start相对应的就是需要处理的数据的尾部,同样的,设置的内容必须是页面中唯一的。
body=mid(wstr,start,over-start)
'设置显示页面的范围
'下面就是动用乾坤挪移***的时候了,通过replace可以用一些字符替换掉数据中指定的字符。
body = replace(body,"skin1","天气预报 - 斯克网络")
body = replace(body,"http://appnews.qq.com/cgi-bin/news_qq_search?city","tianqi.asp?id")
'本程序中已经完成了替换的工作,如果有其他需要的话可以继续进行类似的替换操作。
response.write body
引用: 远程获取内容,并将内容存在本地电脑上,包括任何文件
<%
'----------远程获取内容,并将内容存在本地电脑上,包括任何文件!----------
'on error resume next
'set the content type to the specific type that you are sending.
'response.contenttype = "image/jpeg"
'-------------------------------定义输出格式-----------------------------
path=request.querystring("p")
spath = path
if left(lcase(path),7) <> "http://"; then
'-------------如果前面没有http就是本地文件,交给localfile处理------------
localfile(path)
else
'--------------------否则为远程文件,交给remotefile处理------------------
remotefile(path)
end if
'response.write err.description
sub localfile(path)
'-------------------如果为本地文件则简单的跳转到该页面-------------------
response.redirect path
end sub
sub remotefile(spath)
'-------------------------处理远程文件函数------------------------------
filename = getfilename(spath)
'-------------getfilename为把地址转换为合格的文件名过程-------------
filename = server.mappath("/uploadfile/cache/" & filename)
set objfso = server.createobject("scripting.filesystemobject")
'response.write filename
if objfso.fileexists(filename) then
'--------------检查文件是否是已经访问过,如是,则简单跳转------------
response.redirect "/uploadfile/cache/" & getfilename(path)
else
'----------------否则的话就先用getbody函数读取----------------------
'response.write path
t = getbody(path)
'-----------------用二进制方法写到浏览器上--------------------------
response.binarywrite t
response.flush
'-----------------输出缓冲------------------------------------------
savefile t,getfilename(path)
'------------------将文件内容缓存到本地路径,以待下次访问-----------
end if
set objfso = nothing
end sub
function getbody(url)
'-----------------------本函数为远程获取内容的函数---------------------
'on error resume next
'response.write url
set retrieval = createobject("microsoft.xmlhttp")
'----------------------建立xmlhttp对象-----------------------------
with retrieval
.open "get", url, false, "", ""
'------------------用get,异步的方法发送-----------------------
.send
'getbody = .responsetext
getbody = .responsebody
'------------------函数返回获取的内容--------------------------
end with
set retrieval = nothing
'response.write err.description
end function
function getfilename(str)
'-------------------------本函数为合格化的文件名函数-------------------
str = replace(lcase(str),"http://";,"")
str = replace(lcase(str),"//","/")
str = replace(str,"/","")
str = replace(str,vbcrlf,"")
getfilename = str
end function
sub savefile(str,fname)
'-------------------------本函数为将流内容存盘的函数-------------------
'on error resume next
set objstream = server.createobject("adodb.stream")
'--------------建立adodb.stream对象,必须要ado 2.5以上版本---------
objstream.type = adtypebinary
'-------------以二进制模式打开-------------------------------------
objstream.open
objstream.write str
'--------------------将字符串内容写入缓冲--------------------------
'response.write fname
objstream.savetofile "c:\inetpub\myweb\uploadfile\cache\" & fname,adsavecreateoverwrite
'--------------------将缓冲的内容写入文件--------------------------
'response.binarywrite objstream.read
objstream.close()
set objstream = nothing
'-----------------------关闭对象,释放资源-------------------------
'response.write err.description
end sub
%>
一、使用步骤:
1、创建xmlhttp对象 //需msxml4.0支持
2、打开与服务端的连接,同时定义指令发送方式,服务网页(url)和请求权限等。客户端通过open命令打开与服务端的服务网页的连接。与普通http指令传送一样,可以用"get"方法或"post"方法指向服务端的服务网页。
3、发送指令。
4、等待并接收服务端返回的处理结果。
5、释放xmlhttp对象
二、xmlhttp方法:
1、xmlhttp对象
备注:客户机可以使用xmlhttp对象发送任意的http请求,接受http应答,还可以对应答的xml文档进行解析。
open方法:初始化一个msxml2.xmlhttp请求,指定http请求方式、url以及鉴定信息。
open( bstrmethod, bstrurl, varasync, bstruser, bstrpassword )
bstrmethod: 数据传送方式,即get或post。
bstrurl: 服务网页的url。
varasync: 是否同步执行。缺省为true,即同步执行,但只能在dom中实施同步执行。用中一般将其置为false,即异步执行。
bstruser: 用户名,可省略。
bstrpassword:用户口令,可省略。
send方法:发送http请求到服务器,返回应答。
语法:
oxmlhttprequest.send(varbody)
说明:此方法是否同步取决于open方法的varasync参数。如果设为true则为同步,调用立刻返回,如果设为false调用直到整个应答被接收了才返回。
setrequestheader( bstrheader, bstrvalue )
bstrheader:http 头(header)
bstrvalue: http 头(header)的值
如果open方法定义为post,可以定义表单方式上传:
xmlhttp.setrequestheader( "content-type", "application/x-www-form-urlencoded")
三、xmlhttp属性:
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在dom中调用。
responsebody: 结果返回为无符号整数数组。
responsestream: 结果返回为istream流。
responsetext : 结果返回为字符串。
responsexml: 结果返回为xml格式数据。
四、示例:
< script language="javascript" >
function getdatal(url){
var xmlhttp = new activexobject("msxml2.xmlhttp.4.0";//创建xmlhttprequest对象,需msxml4.0支持 ["msxml2.xmlhttp.4.0","msxml2.domdocument.4.0"]
xmlhttp.open("get",url,false,"",""; //使用http get初始化http请求
xmlhttp.send(""; //发送http请求并获取http响应
return xmlhttp.responsexml; //获取xml文档
}
< /script >
现在网上流行的小偷程序比较多,有新闻类小偷,音乐小偷,下载小偷,那么它们是如何做的呢,下面我来做个简单介绍,希望对各位站长有所帮助。
(一)原理
小偷程序实际上是通过了xml中的xmlhttp组件调用其它网站上的网页。比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤。用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应修改;速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。
(二)事例
下面就xmlhttp在asp中的应用做个简单说明
代码: <%
'常用函数
'1、输入url目标网页地址,返回值gethttppage是目标网页的html代码
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
'2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换
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
'下面试着调用http://wmjie.51.net/swords的html内容
dim url,html
url="http://wmjie.51.net/swords/"
html = gethttppage(url)
response.write html
%>
------------------------------------------------------
代码:
'代码]用xmlhttp读取远程文件
<%
response.buffer = true
dim objxmlhttp, xml
set xml = server.createobject("microsoft.xmlhttp"
xml.open "get", "http://wmjie.51.net/swords/diary.rar", false
xml.send
' add a header to give it a file name:
response.addheader "content-disposition", _
"attachment;filename=mitchell-pres.zip"
' specify the content type to tell the browser what to do:
response.contenttype = "application/zip"
' binarywrite the bytes to the browser
response.binarywrite xml.responsebody
set xml = nothing
%>
-------------------------------------
如何写asp入库小偷程序
入库小偷的原理也很简单:就是用xmlhttp远程读取网页的内容,然后根据需要,对读到的内容进行加工(过滤,替换,分类),最后得到自己需要的数据,加入到数据库中。
首先:我们先用xmlhttp读取远程网页(我的另一片文章中有介绍)。
其次:对内容进行过滤,这个是比较关键的步骤,比如说,我要从远程网页上提取出所有url连接,我应该怎么做呢?
代码:
‘这里用的是正则式
set objregexp = new regexp '建立对象
objregexp.ignorecase = true '大小写忽略
objregexp.global = true '全局为真
objregexp.pattern = "http://.+?" '匹配字段
set mm=objregexp.execute(str) '执行查找,str为输入参数
for each match in mm '进入循环
response.write(match.value) '输出url地址
next
然后,我们需要根据需要做一些替换功能,把不必要的数据替换掉,这个比较简单,用replace函数即可。
最后,进行数据库操作
-------------------------------
一个例子
代码:
<%
on error resume next
server.scripttimeout=9999999
function gethttppage(path)
t = getbody(path)
gethttppage=bytestobstr(t,"gb2312"
end function
'首先,进行小偷程序的一些初始化设置,以上代码的作用分别是忽略掉所有非致命性错误,把小偷程序的运行超时时间设置得很长(这样不会出现运行超时的错误),转换原来默认的utf-8编码转换成gb2312编码,否则直接用xmlhttp组件调用有中文字符的网页得到的将是乱码。
function getbody(url)
on error resume next
set retrieval = createobject("microsoft.xmlhttp"
with retrieval
.open "get", url, false, "", ""
.send
getbody = .responsebody
end with
set retrieval = nothing
end function
'然后调用xmlhttp组件创建一个对象并进行初始化设置。
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 newstring(wstr,strng)
newstring=instr(lcase(wstr),lcase(strng))
if newstring<=0 then newstring=len(wstr)
end function
'处理抓取回来的数据需要调用adodb.stream组件并进行初始化设置。%>
'以下即为页面显示部分
<%
dim wstr,str,url,start,over,city
'定义一些需要使用到的变量
city = request.querystring("id")
'程序传回的id变量(即用户选择的城市)赋给id
url="http://appnews.qq.com/cgi-bin/news_qq_search?city="&city&""
'这里设置需要抓取的页面地址,当然你也可以直接指定某个地址而不使用变量
wstr=gethttppage(url)
'获取指定页面的全部数据
start=newstring(wstr," <html>")
'这里设置需要处理的数据的头部,这个变量应视不同情况而设置,具体内容可以通过查看需要抓取的页面的源代码来确定。因为在这个程序里我们需要抓取整个页面,所以设置为页面全部抓取。注意,设置的内容必须是页面内容唯一的,不可以重复。
over=newstring(wstr," </html>")
'和start相对应的就是需要处理的数据的尾部,同样的,设置的内容必须是页面中唯一的。
body=mid(wstr,start,over-start)
'设置显示页面的范围
'下面就是动用乾坤挪移***的时候了,通过replace可以用一些字符替换掉数据中指定的字符。
body = replace(body,"skin1","天气预报 - 斯克网络")
body = replace(body,"http://appnews.qq.com/cgi-bin/news_qq_search?city","tianqi.asp?id")
'本程序中已经完成了替换的工作,如果有其他需要的话可以继续进行类似的替换操作。
response.write body
引用: 远程获取内容,并将内容存在本地电脑上,包括任何文件
<%
'----------远程获取内容,并将内容存在本地电脑上,包括任何文件!----------
'on error resume next
'set the content type to the specific type that you are sending.
'response.contenttype = "image/jpeg"
'-------------------------------定义输出格式-----------------------------
path=request.querystring("p")
spath = path
if left(lcase(path),7) <> "http://"; then
'-------------如果前面没有http就是本地文件,交给localfile处理------------
localfile(path)
else
'--------------------否则为远程文件,交给remotefile处理------------------
remotefile(path)
end if
'response.write err.description
sub localfile(path)
'-------------------如果为本地文件则简单的跳转到该页面-------------------
response.redirect path
end sub
sub remotefile(spath)
'-------------------------处理远程文件函数------------------------------
filename = getfilename(spath)
'-------------getfilename为把地址转换为合格的文件名过程-------------
filename = server.mappath("/uploadfile/cache/" & filename)
set objfso = server.createobject("scripting.filesystemobject")
'response.write filename
if objfso.fileexists(filename) then
'--------------检查文件是否是已经访问过,如是,则简单跳转------------
response.redirect "/uploadfile/cache/" & getfilename(path)
else
'----------------否则的话就先用getbody函数读取----------------------
'response.write path
t = getbody(path)
'-----------------用二进制方法写到浏览器上--------------------------
response.binarywrite t
response.flush
'-----------------输出缓冲------------------------------------------
savefile t,getfilename(path)
'------------------将文件内容缓存到本地路径,以待下次访问-----------
end if
set objfso = nothing
end sub
function getbody(url)
'-----------------------本函数为远程获取内容的函数---------------------
'on error resume next
'response.write url
set retrieval = createobject("microsoft.xmlhttp")
'----------------------建立xmlhttp对象-----------------------------
with retrieval
.open "get", url, false, "", ""
'------------------用get,异步的方法发送-----------------------
.send
'getbody = .responsetext
getbody = .responsebody
'------------------函数返回获取的内容--------------------------
end with
set retrieval = nothing
'response.write err.description
end function
function getfilename(str)
'-------------------------本函数为合格化的文件名函数-------------------
str = replace(lcase(str),"http://";,"")
str = replace(lcase(str),"//","/")
str = replace(str,"/","")
str = replace(str,vbcrlf,"")
getfilename = str
end function
sub savefile(str,fname)
'-------------------------本函数为将流内容存盘的函数-------------------
'on error resume next
set objstream = server.createobject("adodb.stream")
'--------------建立adodb.stream对象,必须要ado 2.5以上版本---------
objstream.type = adtypebinary
'-------------以二进制模式打开-------------------------------------
objstream.open
objstream.write str
'--------------------将字符串内容写入缓冲--------------------------
'response.write fname
objstream.savetofile "c:\inetpub\myweb\uploadfile\cache\" & fname,adsavecreateoverwrite
'--------------------将缓冲的内容写入文件--------------------------
'response.binarywrite objstream.read
objstream.close()
set objstream = nothing
'-----------------------关闭对象,释放资源-------------------------
'response.write err.description
end sub
%>
下一篇: 几个常用的ASP函数