在服务器端 用 xmlhttp 请求

解决方案 »

  1.   

    用AJAX XMLHTTPREQUEST<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>无标题文档</title>
    </head><body>
    <%
    dim aa
    Set objXMLHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP") '创建xmlhttp对象
    'set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP") '这个方法稍微古老一点
    objXmlHttp.open "GET","http://www.alibaba.com.cn",false '用类似于http协议中的get方法打开yahoo国际站
    objXmlHttp.send() '发送了一个http请求
    aa = BytesToBstr(objXmlHttp.responseBody) '输出返回的文本
     response.write (aa)
    Set obiXMLHTTP=nothing '注销object
    Function BytesToBstr(body)
    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 = "GB2312" 
    '转换原来默认的UTF-8编码转换成GB2312编码,否则直接用XMLHTTP调用有中文字符的网页得到的将是乱码
    BytesToBstr = objstream.ReadText 
    objstream.Close
    set objstream = nothing
    End Function%>
    </body>
    </html>
      

  2.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="zourinet">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT=""></HEAD><BODY>
    <form method="post" action="">
    <div></div>
    </form>
    </BODY>
    </HTML>
    <script language="JavaScript">
    /* <![CDATA[ */
    //用于获取相应地址档
    function GetXMLContent(urlstr)
    {
    var http_request;
    urlstr.indexOf("?")==-1?urlstr=urlstr+"?"+Math.random():urlstr=urlstr+"&"+Math.random()
      if (window.XMLHttpRequest){ // Mozilla, Safari, ...
    http_request = new XMLHttpRequest();

    else if (window.ActiveXObject) { // IE
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    http_request.open("GET",urlstr,false);
    http_request.send(null);
    return http_request.responseText;
    }
    document.body.innerHTML = GetXMLContent("http://www.csdn.net");
    /* ]]> */
    </script>
      

  3.   

    如果能获取目录下所有不知名html文件代码才是王道,哈。
      

  4.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>未命名頁面</title>
        
        <script type="text/javascript">
        <!--
        var xmlhttp;
        
        function createHTTP()
        {
            if (window.ActiveXObject) //如果是IE
            {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            else if (window.XMLHttpRequest) //如果是Mozilla,Safari,...
            {
                xmlhttp = new XMLHttpRequest();
            }
        }
        
        function GetData()
        {
            createHTTP();
            xmlhttp.onreadystatechange = StateChange;
            xmlhttp.open("GET", "http://www.csdn.net", false);
            xmlhttp.send();
        }
        
        function StateChange()
        {
            if (xmlhttp.readystate == 4)
            {
                if (xmlhttp.status == 200)
                {
                    document.write(xmlhttp.responseText); //xmlhttp.responseText即為想獲取的網頁的全部html代碼
                }
            }
        }
        
        //-->
        </script>
        
    </head>
    <body onload="GetData()">
        <form id="form1">
            <input type="text" id="txtTest" />
        </form>
    </body>
    </html>5樓的已經回答了,不過還是把自己試驗的結果發出來
    不過如果樓主啟動了"網頁的指令碼偵錯"會提示"必須要有物件",這個是因為我們沒有下載網頁使用的外部javascript檔案
      

  5.   

    什么叫做“通过己方服务器进行代理下载”~~根本看不懂~~那个js是在客户端浏览器里面跑的~~~就是浏览网页那个人的浏览器跑的~关你服务器p事啊?~~
      

  6.   

    以目前IE默认的权限,Internet区域,XMLHTTP不可以在客户端访问非本域下的资源。
      

  7.   

    以目前IE默认的权限,Internet区域,XMLHTTP不可以在客户端访问非本域下的资源。
    ---------------------------------------------------------------
    谁说的?XMLHTTP是可以跨域获取数据的~
    还有楼主根本9不搭8~我都说了XMLHTTP可以做到的~~是客户端实现的!!!!下面是我以前做过的代码~本地获取google new搜索结果的页面~
    你把google new当作你的bbb.com~~看看是不是能实现!!!请输入搜索关键字:<input id="q" />
    <input type="button" onclick="action()" value="获取" />
    <div id="loading"></div><br />
    <div id="show"></div>
    <script type="text/javascript">
    /* 拼接搜索网址 */
    function action(){
        var urlTemp="http://news.google.cn/news?hl=zh-CN&tab=wn&ned=ccn&q={0}&ie=UTF-8&output=rss";
        var url=urlTemp.replace("{0}",encodeURI(document.getElementById("q").value));
        document.getElementById("loading").innerHTML="loading...";
        getDoc(url,show);
    }/* 参数:要获取的文件的网址,回调函数*/
    function getDoc(url,fun){
        var xmlhttp; 
        try{ 
            xmlhttp=new XMLHttpRequest(); 
        }catch(e){ 
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
        } 
        xmlhttp.onreadystatechange=function(){ 
            if(xmlhttp.readyState==4){ 
                    if(xmlhttp.status==200){
                            fun(xmlhttp.responseXML);
                    } 
            } 
        } 
        xmlhttp.open("get",url,true);
        window.startGetFileTime=new Date();
        xmlhttp.send(); 
    }/* 解析文档 */
    function show(xml){
        window.endGetFileTime=new Date();
        document.getElementById("loading").innerHTML="已获取,正在分析...";
        window.startAnalysisTime=new Date();
        var textDoc=xml;
        var xslDoc=document.getElementById("xsl").XMLDocument;
        document.getElementById("show").innerHTML=textDoc.transformNode(xslDoc);
        window.endAnalysisTime=new Date();
        var mess=[];
        mess.push("完成,下载文件耗时:");
        mess.push(window.endGetFileTime-window.startGetFileTime);
        mess.push("毫秒,解析文件耗时:");
        mess.push(window.endAnalysisTime-window.startAnalysisTime);
        mess.push("毫秒");
        document.getElementById("loading").innerHTML=mess.join("");
    }
    </script>
    <xml id="xsl">
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
    <xsl:template match="/">
    <xsl:apply-templates select="rss/channel" />
    </xsl:template>
    <xsl:template match="rss/channel">
    <xsl:for-each select="./item" >
    <p>
    <xsl:element name="a">
    <xsl:attribute name="href">
    <xsl:value-of select="./link" />
    </xsl:attribute>
    <xsl:attribute name="target">
    _new
    </xsl:attribute>
    <xsl:value-of select="./title" />
    </xsl:element>
    <xsl:value-of select="./pubDate" />
    </p>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>
    </xml>
      

  8.   

    xmlhttp 在客户端,确实是不能跨域加载. 但是通过服务器抓取楼主觉得有什么不好的?
      

  9.   

    he_8134
    把你的代码放到Web server里,看一下。
    别人不会点保存网页再打开的。
      

  10.   

    你可以看一下http://a.tominfo9.com/a.htm
      

  11.   

    发表于:2008-01-12 14:32:2520楼 得分:0 
    你可以看一下http://a.tominfo9.com/a.htm 我打开页面,输入任意网址。依旧提示没有权限的。
      

  12.   

    参考:
    http://topic.csdn.net/t/20060726/16/4906734.html
      

  13.   

    通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序。比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名。分析系统在根据得到的数据进行数据分析。为业务提供参考数据。 
      为了完成以上的需求,我们就需要模拟浏览器浏览网页,得到页面的数据在进行分析,最后把分析的结构,即整理好的数据写入数据库。那么我们的思路就是: 
      1、发送HttpRequest请求。 
      2、接收HttpResponse返回的结果。得到特定页面的html源文件。 
      3、取出包含数据的那一部分源码。 
      4、根据html源码生成HtmlDocument,循环取出数据。 
      5、写入数据库。 
    程序如下: 
    C# code//根据Url地址得到网页的html源码
            private string GetWebContent(string Url)
            {
                string strResult="";
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
        //声明一个HttpWebRequest请求
                    request.Timeout = 30000;
                    //设置连接超时时间
                    request.Headers.Set("Pragma", "no-cache");
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    Stream streamReceive = response.GetResponseStream();
                    Encoding encoding = Encoding.GetEncoding("GB2312");
                    StreamReader streamReader = new StreamReader(streamReceive, encoding);
                    strResult = streamReader.ReadToEnd();
                }
                catch
                {
                    MessageBox.Show("出错");
                }
                return strResult;
            }
    为了使用HttpWebRequest和HttpWebResponse,需填名字空间引用
      using System.Net;以下是程序具体实现过程:
     private void button1_Click(object sender, EventArgs e)
            {
                //要抓取的URL地址
                string Url = "http://list.mp3.baidu.com/topso/mp3topsong.html?id=1#top2";            //得到指定Url的源码
       string strWebContent = GetWebContent(Url);            richTextBox1.Text = strWebContent;
       //取出和数据有关的那段源码
                int iBodyStart = strWebContent.IndexOf("<body", 0);
                int iStart = strWebContent.IndexOf("歌曲TOP500", iBodyStart);
                int iTableStart = strWebContent.IndexOf("<table", iStart);
                int iTableEnd = strWebContent.IndexOf("</table>", iTableStart);
                string strWeb = strWebContent.Substring(iTableStart, iTableEnd - iTableStart + 8);            //生成HtmlDocument
       WebBrowser webb = new WebBrowser();
                webb.Navigate("about:blank");
                HtmlDocument htmldoc = webb.Document.OpenNew(true);
                htmldoc.Write(strWeb);
                HtmlElementCollection htmlTR = htmldoc.GetElementsByTagName("TR");
                foreach (HtmlElement tr in htmlTR)
                {
                    string strID = tr.GetElementsByTagName("TD")[0].InnerText;
                    string strName = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "MusicName");
                    string strSinger = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "Singer");
                    strID = strID.Replace(".", "");
                    //插入DataTable
                    AddLine(strID, strName, strSinger,"0");                string strID1 = tr.GetElementsByTagName("TD")[2].InnerText;
                    string strName1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "MusicName");
                    string strSinger1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "Singer");
                    //插入DataTable
                    strID1 = strID1.Replace(".", "");
                    AddLine(strID1, strName1, strSinger1,"0");                string strID2 = tr.GetElementsByTagName("TD")[4].InnerText;
                    string strName2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "MusicName");
                    string strSinger2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "Singer");
                    //插入DataTable
                    strID2 = strID2.Replace(".", "");
                    AddLine(strID2, strName2, strSinger2,"0");            }
                //插入数据库
                InsertData(dt);
       
                dataGridView1.DataSource = dt.DefaultView;
    }
      

  14.   

    呵呵,看来楼主是很着急呀:))
    参考一下这里看有没有帮助:http://www.f-dev.com/28
      

  15.   

    提供一个变通的思路。在网页上使用一个iframe,iframe可以宽高为0隐藏起来,用JS把src指定到你要取的页面。然后取iframe里的document的内容(innerHTML),这不就是你要的东西了?
      

  16.   

    提供一个变通的思路。 在网页上使用一个iframe,iframe可以宽高为0隐藏起来,用JS把src指定到你要取的页面。然后取iframe里的document的内容(innerHTML),这不就是你要的东西了?
    -------------------------------
    取得到就厉害了~~~
      

  17.   

    还是XmlHttpRequest好点毕竟很多网站做了iframe的处理,一请求就跳转报异常的多。
      

  18.   

    2、不能通过www.aaa.com   服务器进行中转下载。楼主没有看过ajax的基础资料?
    不知道ajax不能跨域?
    (to 15楼,本地调试是可以跨域,请你放www.xxx.com服务器上试试,)
    请楼主自己搜索 ajax 跨域
      

  19.   

    ajax不能跨域
    用C#中的webClient和webRequest可以解决.
    在C#2.0中用htmlDocument对像来解析里面的内容
      

  20.   

    javascript 的xmlhttprequest是不能跨域的,所以只能通过服务端来获取其他域的页面。
      

  21.   

    ajax不能跨域,目前对于客户端跨域处理,基本都是通过服务器中转来做的?
      

  22.   

    我分少,给点分吧:
    做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。Ajax的跨域访问问题是现有的Ajax开发人员比较常遇到的问题。 IE对于跨域访问的处理是,弹出警告框,提醒用户。如果用户将该网站纳入可信任网站,或者调低安全级别,那么这个问题IE就不会在提醒你。 FireFox等其它非微软的浏览器遇到跨域访问,则解决方案统一是拒绝访问。 有人说,IE是主流浏览器,只要它能正常使用就好了。此言差已,IE虽然能够处理,但是是有前提的,要么用户不厌其烦地在页面弹出警告框之后点击是(点击否就不执行该Ajax调用了),要么用户将该网站纳入可信任站点。这两种做法,在企业管理系统的应用中倒是比较常见,因为系统管理员可以以行政手段保证用户的行为。但是对于互联网上的网站或者门户开发,这种做法则不行。 最近遇到了这个问题,需要在跨域访问结束之后完成使主窗口出现一些特效,搜索了一些资料,通过不断尝试以及在不同浏览器中进行兼容性测试,找到了几个可行的方案: 1、Web代理的方式。即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求A网站提供Web代理的支持,因此A网站与B网站之间必须是紧密协作的,且每次交互过程,A网站的服务器负担增加,且无法代用户保存session状态。 2、on-Demand方式。MYMSN的门户就用的这种方式,不过MYMSN中不涉及跨域访问问题。动态控制script标记的生成,通过修改script标记的src属性完成对跨域页面的调用。此方案存在的缺陷是,script的src属性完成该调用时采取的方式时get方式,如果请求时传递的字符串过大时,可能会无法正常运行。不过此方案非常适合聚合类门户使用。 3、iframe方式。查看过醒来在javaeye上的一篇关于跨域访问的帖子,他提到自己已经用iframe的方式解决了跨域访问问题。数据提交跟获取,采用iframe这种方式的确可以了,但由于父窗口与子窗口之间不能交互(跨域访问的情况下,这种交互被拒绝),因此无法完成对父窗口效果的影响。 4、用户本地转储方式:IE本身依附于windows平台的特性为我们提供了一种基于iframe,利用内存来“绕行”的方案,即两个window之间可以在客户端通过windows剪贴板的方式进行数据传输,只需要在接受数据的一方设置Interval进行轮询,获得结果后清除Interval即可。FF的平台独立性决定了它不支持剪贴板这种方式,而以往版本的FF中存在的插件漏洞又被fixed了,所以FF无法通过内存来完成暗渡陈仓。而由于文件操作FF也没有提供支持(无法通过Cookie跨域完成数据传递),致使这种技巧性的方式只能在IE中使用。 5、我自己用于解决这类问题的方式:结合了前面几种方式,在访问A网站时,先请求B网站完成数据处理,再根据返回的标识来获得所需的结果。这种方法的缺点也很明显,B网站的负载增大了。优点,对session也实现了保持,同时A网站与B网站页面间的交互能力增强了。最重要的一点,这种方案满足了我的全部需要。 总结一下,以上方案中可选择的情况下,我最推荐on-Demand方式,在不需要提交大量数据的情况下,这种方式能够解决您的大部分问题。
    参考资料:http://www.newbooks.com.cn/info/37166.html
      

  23.   

    照lz的要求,a网站跟b网站肯定没有关系
      

  24.   

    用ajax可以 如ls的几位。
    不过只能在ie下实现。
    firefox不行。
    ie的xmlhttp是可以跨域的,存在着安全漏洞
    firefox下是不可以跨域的。