站点整合随想

mac2022-06-30  18

     前段时间要做一个项目整合,把开发的网站和以前的一个网站进行整合,主要是不希望在另一个网站的用户流失掉,出是重复利用嘛,呵呵。。

并且如果遇到一个好的站点想发个言基本都需要注册,如果整合起来的话倒也是很爽,哈哈。。。。

    这个想法其实是前段时间公司需要整合DZ论坛这个鬼东西被逼着做的,想想真是恶梦,足足弄了大半个月总算是把网站和论坛整合在一起了,废话不再多说:

其实整合如果真正亲自做了的话觉得也不难,这两天查了下新浪那几大网站的整合,看得云里雾里也没有找到好的切入点(才疏学浅了,呵呵),不过倒还是觉得直接请求的方式简单:

   其实就是用HttpWebRequest去请求你要整合的网站的一个类似于接口页面的内容,在被请求的页面处理如果成功则输出一个XML格式的数据,再经过请求页再用HttpWebResponse获取到被请求页的HTML内容,之后根据返回的内容进行XML解析。。。

   当然为了安全起见您可以设置加密格式,类似于DZ的方法,根据生成的一个key进行解密。。。。

      下面代码是请求页的内容,post是你欲请求的内容,格式:name=xxx&age=xx;

 

代码 /// <summary> /// 发送请求和获取请求后的数据 /// </summary> /// <param name="url"> 请求的远程URL </param> /// <param name="post"> 请求的内容 </param> /// <returns> 这里返回的是一个xml格式的String字符串 </returns> private static string Conn( string url, string post) { bool bRetVal = false ; // 创建远程请求的实例 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); myRequest.AllowAutoRedirect = true ; myRequest.UserAgent = HttpContext.Current.Request.UserAgent; // 这里设置是否与远程持续连接 myRequest.KeepAlive = false ; if ( string .IsNullOrEmpty(post)) myRequest.Method = " GET " ; else { myRequest.Method = " POST " ; // 定义这个Stream是只是为了得到发送字串 经过编码之后的长度。 Stream myStream = new MemoryStream(); // 这里要注意的是编码格式,必须与远程页面的编码格式相同,以防止出现乱码 StreamWriter myStreamWriter = new StreamWriter(myStream, Encoding.GetEncoding( " UTF-8 " )); myStreamWriter.Write(post); myStreamWriter.Flush(); long len = myStream.Length; myStreamWriter.Close(); myStreamWriter.Dispose(); myStream.Close(); myStream.Dispose(); myRequest.ContentType = " application/x-www-form-urlencoded " ; myRequest.ContentLength = len; Stream newStream = myRequest.GetRequestStream(); myStreamWriter = new StreamWriter(newStream, Encoding.GetEncoding( " UTF-8 " )); myStreamWriter.Write(post); myStreamWriter.Close(); myStreamWriter.Dispose(); newStream.Close(); newStream.Dispose(); } /// /创建接收回馈的字节流类 string responseHtml = string .Empty; myRequest.Timeout = 100000 ; HttpWebResponse webResponse = null ; try { webResponse = (HttpWebResponse)myRequest.GetResponse(); bRetVal = true ; if (webResponse.StatusCode != HttpStatusCode.OK) bRetVal = false ; if (bRetVal) { // 得到回写的字节流 Stream receiveStream = webResponse.GetResponseStream(); StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding( " utf-8 " )); responseHtml = readStream.ReadToEnd(); readStream.Close(); } if (webResponse != null ) webResponse.Close(); } catch (Exception ex) { throw ex; } return responseHtml; } /// <summary> /// 用于解析读取到的内容,当然你的xml节点可以自定义的,返回键值对数据集 /// </summary> /// <param name="strXml"></param> /// <returns></returns> private Hashtable XMLOperate( string strXml) { strXml = strXml.Replace( " & " , " & " ); Hashtable ht = new Hashtable(); XmlDocument XMLDom = new XmlDocument(); XMLDom.LoadXml(strXml); XmlNode newXMLNode = XMLDom.SelectSingleNode( " root " ); int i = 0 ; foreach (XmlNode xn in newXMLNode.ChildNodes) { ht.Add(i ++ , xn.InnerText); } return ht; }

 

 

被请求页面的内容:

   被请求页的面中,在前台必须删除除第一行之外的所有的HTML代码,因为些页面将在页面输出一个响应的xml格式的内容:

 

代码 string name = Request.Form[ " name " ] == null ? "" : Server.HtmlDecode(Request.Form[ " name " ].ToString()); string age = Request.Form[ " age " ] == null ? "" : Server.HtmlDecode(Request.Form[ " age " ].ToString()); / // // / 这里根据需求处理你需要的结果等其它一些个东西 // Response.Write( string .Format( " <root><item1>{0}</item1><item2>{1}</item2></root> " ,name,age));

 

 

 

转载于:https://www.cnblogs.com/netDream/archive/2010/11/21/ThinkOfConformity.html

最新回复(0)