• 欢迎访问金刀客博客!
  • 2019,春节快乐!

asp中网页源代码的获取,跨域的实现及js的传值

原创天空 admin 11713次浏览 已收录 0个评论

最近几天一直在研究怎样去掉用google翻译我博客的页面中的框架,最后得出结论没有完美解决方案。详情见次博文-http://www.daokers.cn/article/original/451.htm
我们知道静态程序是我们从服务器上下载网页后在本地执行,而动态网页是在服务器中执行然后返回给我们执行的结果,从而达到服务端和客服端交互的效果,这就是所谓的动态。那么获取网页源代码的方法我们也从这2个方面来着手。下面我就从测试google翻译的usg值为例详细说说网页源代码的获取,跨域的实现及js的传值。
目标:获取http://www.daokerstest.com/test.asp&u=http://www.daokers.cn这个页面的源代码,U值为变量。
第一种方法,在本地执行程序获取指定网页源代码,这通过js代码加上xmlhttp组件来完成。
在test.js文件中。

function translate() {
var currentUrl=window.location.href;//获取当前页面地址或者别的网站地址
var translateUrl=”http://www.daokerstest.com/test.asp&u=”+currentUrl
var xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
xmlhttp.open(“GET”,translateUrl,false);
xmlhttp.send();
var myString=xmlhttp.responseText;//获取返回的源码值
document.write(myString)//传出此值
}

第二种方法,上面的方法最简单,但是最大的问题是如果想获取别的网站的源代码就存在跨域的问题,代码在xmlhttp.open(“GET”,translateUrl,false);处将无法执行,那么我们可以让这个代码在服务器执行然后再传回来,也就是通过代理来解决跨域的问题。
这里只能通过一个代理页面来获取目标网页的源代码,这里代理页面为http://www.daokerstest.com/daili.asp
在test.js文件中。

function translate() {
var currentUrl=window.location.href;//获取当前页面地址或者别的网站地址
var translateUrl=”http://www.daokerstest.com/daili.asp&u=”+currentUrl
var xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
xmlhttp.open(“GET”,translateUrl,false);
xmlhttp.send();
var myString=xmlhttp.responseText;//获取返回的源码值
document.write(myString)//传出此值
}

daili.asp代码:

这里涉及到了asp和js之间的传值,这个方法相当的实用,是蓝色理想的小秦告诉我的。最开始我是用string=request(“id”)来获取,然后在js中<%=string%>调用,一直失败,最后小秦的提醒才让我如梦初醒。我严重忽视了server中js和asp的执行顺序,在server中是先执行js然后执行asp代码,所以当js中调用string值时,asp代码还没有执行获取id值呢!用Request.Item(“id”).Item就可以直接在js中获取参数值,从而成功的实现了绕过了跨域访问限制。
第三种方法,js可以获取网页源代码,asp也是可以的,并且不存在跨域的问题。js代码不变。
daili.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
else
If Http.status=200 Then
response.write replace(BytesToBstr(http.responseBody,”gb2312″),chr(10),””)
End If
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
Dim Url,Html,Usg,id
id=Request(“id”)
Url=”http://www.daokerstest.com/test.asp&u=”+id
Html = getHTTPPage(Url)
Response.write Html
‘此代码修改自http://www.stubc.com/thread-465-1-3.html
%>

这个就是直接在asp中用request获取参数,然后获取指定网页源代码。
从上面实例可见,都是利用XmlHTTP来获取别站的网页源代码,只要代码是在server执行就不存在跨域的问题。
参考文献:
http://www.stubc.com/thread-465-1-3.html
http://www.stubc.com/thread-1366-1-3.html
http://blog.linkhelper.cn/asp/aspxmlhttp.asp


金刀客博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明asp中网页源代码的获取,跨域的实现及js的传值
喜欢 (12)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到