小偷&小偷入库&采集入库_ASP教程-查字典教程网
小偷&小偷入库&采集入库
小偷&小偷入库&采集入库
发布时间:2016-12-29 来源:查字典编辑
摘要: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格式数据。

四、示例:

<scriptlanguage="javascript">

functiongetDatal(url){

varxmlhttp=newActiveXObject("MSXML2.XMLHTTP.4.0";//创建XMLHTTPRequest对象,需MSXML4.0支持["MSXML2.XMLHTTP.4.0","MSXML2.DOMDocument.4.0"]

xmlhttp.open("GET",url,false,"","";//使用HTTPGET初始化HTTP请求

xmlhttp.send("";//发送HTTP请求并获取HTTP响应

returnxmlhttp.responseXML;//获取XML文档

}

</script>

现在网上流行的小偷程序比较多,有新闻类小偷,音乐小偷,下载小偷,那么它们是如何做的呢,下面我来做个简单介绍,希望对各位站长有所帮助。

(一)原理

小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页。比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤。用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应修改;速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。

(二)事例

下面就XMLHTTP在ASP中的应用做个简单说明

代码:<%

'常用函数

'1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码

functiongetHTTPPage(url)

dimHttp

setHttp=server.createobject("MSXML2.XMLHTTP"

Http.open"GET",url,false

Http.send()

ifHttp.readystate<>4then

exitfunction

endif

getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312"

sethttp=nothing

iferr.number<>0thenerr.Clear

endfunction

'2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换

FunctionBytesToBstr(body,Cset)

dimobjstream

setobjstream=Server.CreateObject("adodb.stream"

objstream.Type=1

objstream.Mode=3

objstream.Open

objstream.Writebody

objstream.Position=0

objstream.Type=2

objstream.Charset=Cset

BytesToBstr=objstream.ReadText

objstream.Close

setobjstream=nothing

EndFunction

'下面试着调用http://wmjie.51.net/swords的html内容

DimUrl,Html

Url="http://wmjie.51.net/swords/"

Html=getHTTPPage(Url)

Response.writeHtml

%>

------------------------------------------------------

代码:

'代码]用XMLHTTP读取远程文件

<%

Response.Buffer=True

DimobjXMLHTTP,xml

Setxml=Server.CreateObject("Microsoft.XMLHTTP"

xml.Open"GET","http://wmjie.51.net/swords/diary.rar",False

xml.Send

'Addaheadertogiveitafilename:

Response.AddHeader"Content-Disposition",_

"attachment;filename=mitchell-pres.zip"

'Specifythecontenttypetotellthebrowserwhattodo:

Response.ContentType="application/zip"

'Binarywritethebytestothebrowser

Response.BinaryWritexml.responseBody

Setxml=Nothing

%>

-------------------------------------

如何写ASP入库小偷程序

入库小偷的原理也很简单:就是用XMLHTTP远程读取网页的内容,然后根据需要,对读到的内容进行加工(过滤,替换,分类),最后得到自己需要的数据,加入到数据库中。

首先:我们先用XMLHTTP读取远程网页(我的另一片文章中有介绍)。

其次:对内容进行过滤,这个是比较关键的步骤,比如说,我要从远程网页上提取出所有url连接,我应该怎么做呢?

代码:

‘这里用的是正则式

SetobjRegExp=NewRegexp'建立对象

objRegExp.IgnoreCase=True'大小写忽略

objRegExp.Global=True'全局为真

objRegExp.Pattern="http://.+?"'匹配字段

setmm=objRegExp.Execute(str)'执行查找,str为输入参数

ForEachMatchinmm'进入循环

Response.write(Match.Value)'输出url地址

next

然后,我们需要根据需要做一些替换功能,把不必要的数据替换掉,这个比较简单,用Replace函数即可。

最后,进行数据库操作

-------------------------------

一个例子

代码:

<%

OnErrorResumeNext

Server.ScriptTimeOut=9999999

FunctiongetHTTPPage(Path)

t=GetBody(Path)

getHTTPPage=BytesToBstr(t,"GB2312"

Endfunction

'首先,进行小偷程序的一些初始化设置,以上代码的作用分别是忽略掉所有非致命性错误,把小偷程序的运行超时时间设置得很长(这样不会出现运行超时的错误),转换原来默认的UTF-8编码转换成GB2312编码,否则直接用XMLHTTP组件调用有中文字符的网页得到的将是乱码。

FunctionGetBody(url)

onerrorresumenext

SetRetrieval=CreateObject("Microsoft.XMLHTTP"

WithRetrieval

.Open"Get",url,False,"",""

.Send

GetBody=.ResponseBody

EndWith

SetRetrieval=Nothing

EndFunction

'然后调用XMLHTTP组件创建一个对象并进行初始化设置。

FunctionBytesToBstr(body,Cset)

dimobjstream

setobjstream=Server.CreateObject("adodb.stream"

objstream.Type=1

objstream.Mode=3

objstream.Open

objstream.Writebody

objstream.Position=0

objstream.Type=2

objstream.Charset=Cset

BytesToBstr=objstream.ReadText

objstream.Close

setobjstream=nothing

EndFunction

FunctionNewstring(wstr,strng)

Newstring=Instr(lcase(wstr),lcase(strng))

ifNewstring<=0thenNewstring=Len(wstr)

EndFunction

'处理抓取回来的数据需要调用adodb.stream组件并进行初始化设置。%>

'以下即为页面显示部分

<%

Dimwstr,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.writebody

引用:远程获取内容,并将内容存在本地电脑上,包括任何文件

<%

'----------远程获取内容,并将内容存在本地电脑上,包括任何文件!----------

'OnErrorResumeNext

'Setthecontenttypetothespecifictypethatyouaresending.

'Response.ContentType="IMAGE/JPEG"

'-------------------------------定义输出格式-----------------------------

Path=request.querystring("p")

sPath=Path

ifleft(lcase(path),7)<>"http://";then

'-------------如果前面没有http就是本地文件,交给LocalFile处理------------

LocalFile(path)

else

'--------------------否则为远程文件,交给RemoteFile处理------------------

RemoteFile(Path)

endif

'Response.Writeerr.Description

subLocalFile(Path)

'-------------------如果为本地文件则简单的跳转到该页面-------------------

Response.RedirectPath

EndSub

SubRemoteFile(sPath)

'-------------------------处理远程文件函数------------------------------

FileName=GetFileName(sPath)

'-------------GetFileName为把地址转换为合格的文件名过程-------------

FileName=Server.MapPath("/UploadFile/Cache/"&FileName)

SetobjFso=Server.CreateObject("Scripting.FileSystemObject")

'Response.WritefileName

ifobjFso.FileExists(FileName)Then

'--------------检查文件是否是已经访问过,如是,则简单跳转------------

Response.Redirect"/uploadfile/cache/"&GetFileName(path)

Else

'----------------否则的话就先用GetBody函数读取----------------------

'Response.WritePath

t=GetBody(Path)

'-----------------用二进制方法写到浏览器上--------------------------

Response.BinaryWritet

Response.Flush

'-----------------输出缓冲------------------------------------------

SaveFilet,GetFileName(path)

'------------------将文件内容缓存到本地路径,以待下次访问-----------

Endif

SetobjFso=Nothing

EndSub

FunctionGetBody(url)

'-----------------------本函数为远程获取内容的函数---------------------

'onerrorresumenext

'Response.Writeurl

SetRetrieval=CreateObject("Microsoft.XMLHTTP")

'----------------------建立XMLHTTP对象-----------------------------

WithRetrieval

.Open"Get",url,False,"",""

'------------------用Get,异步的方法发送-----------------------

.Send

'GetBody=.ResponseText

GetBody=.ResponseBody

'------------------函数返回获取的内容--------------------------

EndWith

SetRetrieval=Nothing

'response.Writeerr.Description

EndFunction

FunctionGetFileName(str)

'-------------------------本函数为合格化的文件名函数-------------------

str=Replace(lcase(str),"http://";,"")

str=Replace(lcase(str),"//","/")

str=Replace(str,"/","")

str=replace(str,vbcrlf,"")

GetFileName=str

EndFunction

subSaveFile(str,fName)

'-------------------------本函数为将流内容存盘的函数-------------------

'onerrorresumenext

SetobjStream=Server.CreateObject("ADODB.Stream")

'--------------建立ADODB.Stream对象,必须要ADO2.5以上版本---------

objStream.Type=adTypeBinary

'-------------以二进制模式打开-------------------------------------

objStream.Open

objstream.writestr

'--------------------将字符串内容写入缓冲--------------------------

'response.Writefname

objstream.SaveToFile"c:inetpubmywebuploadfilecache"&fName,adSaveCreateOverWrite

'--------------------将缓冲的内容写入文件--------------------------

'response.BinaryWriteobjstream.Read

objstream.Close()

setobjstream=nothing

'-----------------------关闭对象,释放资源-------------------------

'response.Writeerr.Description

Endsub

%>

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新ASP教程学习
    热门ASP教程学习
    编程开发子分类