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

ASP 1666 0 2013-02-16

asp中网页源代码的获取,跨域的实现及js的传值
    最近几天一直在研究怎样去掉用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代码:
程序代码 程序代码

<script language="JScript" runat="server">
function  getusg() {
var  getusgUrl="http://www.daokerstest.com/test.asp&u="+(Request.Item("id").Item||"");
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  xmlhttp.open("GET",getusgUrl,false);
  xmlhttp.send();
var myString=xmlhttp.responseText;
return myString;
}
Response.Write(getusg());
</script>

这 里涉及到了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

上一篇:ASP动态页面生成HTML静态页面-编码UTF-8

下一篇:如何防止页面中的敏感信息被提取

讨论数量:0

请先登录再发表讨论。 2024-05-05

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链