DotText源码阅读(7) --Pingback/TrackBack
CNBlogsDottext10Beta2版本中,TRACKBACK功能被屏蔽掉了,原因可能是因为很多人安装成功后,在提交包含引用链接的POSTS时,出现错误:
将截断字符串或二进制数据
其实这是因为发送TRACKBACK的关键方法:SendPing(string trackBackItem, string parameters)里,发送字节流时按照ASCII码的长度来发送,当PARAMETERS中包含中文时,就会出错,解决方法是转换成UTF-8发送,下面是我修改过后的代码:
private void SendPing(string trackBackItem, string parameters)
{
HttpWebRequest request = BlogRequest.CreateRequest(trackBackItem);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.KeepAlive = false;
byte [] buff = Encoding.GetEncoding("UTF-8").GetBytes(parameters);
request.ContentLength = buff.Length;
Stream reqStream = null;
try
{
reqStream = request.GetRequestStream();
reqStream.Write(buff, 0, buff.Length);
}
catch(Exception e)
{
Logger.LogManager.CreateExceptionLog(e,"SendPing Exception");
}
finally
{
reqStream.Close();
}
首先我们来看一下是怎么发送TRACKBACK的:入口是Dottext.Framework.EntryHandling.Process
检查文章内容中是否已经包含了远程网页的链接,只有包含才能继续 从远程链接的网页下载HTML代码,如果没得到,说明不是合法链接,要返回 在得到的HTML代码中检查是否已经包含了本文的链接,有说明已经PING过了,要返回 在得到的HTML代码中根据TRACKBACK标准取到要TRACKBACK链接(链接包含在RDF为键值的被注释的XHTML代码中),从而完成了由网页链接到TRACKBACK链接的转化 发送(PING)TRACKBACK。
再来看一下接收TRACKBACK的流程,入口是:Dottext.Framework.Tracking.TrackBackHandler.ProcessRequest
根据PING过来的TRACKBACK链接得到本地文章的ID号,得不到则不是合法链接,要返回 REQUEST方法是否是POST,不是要返回,这是TRACKBACK标准规定的。 根据ID号从库中检索数据,生成ENTRY对象 根据传过来的URL下载远程网页的HTML代码,如果没得到或得到的HTML中没有包含本地文章的链接,说明不是合法链接,要返回 从得到的HTML代码中分析出对方的页面标题,如果没有,要返回 生成一个新的ENTRY对象,并对其各个属性赋值,然后入库
由此我们看到DOTTEXT发送TRACKBACK时效率是比较低的。原因是需要去下载远程的HTML,这将是一个非常耗时的工作,更不用说还要从很可能十分庞大的HTML代码中提取出TRACKBACK链接。
再者就是接收TRACKBACK时,并没有建立屏蔽机制。从而无法避免垃极广告的侵袭,也就是我们所说的SPAM COMMENT。
我想要解决这些问题,需要改变发送TRACKBACK的发送机制。
不再根据TRACKBACK标准去自动获取TRACKBACK,这样不仅效率极低,而且很多网站并不支持这个标准(比如 www.blogchinese.com 就直接提供引用通告,而不是隐藏在网页中,哈哈)的话,就无法TRACKBACK成功了。我们就认为用户输入的就是合法的TRACKBACK链接。直接进行发送。 为了能让用户得到合法的TRACKBACK地址,在每一篇文章内容之后,都显示此文的TRACKBACK链接。 再提供一个页面,输入网页链接,就能显示出此网页的TRACKBACK链接,以继续支持那些符合标准的网站
在接收TRACKBACK时,我们相应做以下改动:
将对方URL拿到库里去验证,看对方是否已经PING过了,因为是在本地进行,速度会非常快。 在库中建立BLACKIP表,对来方的IP进行校验,这样就拥有了封对方IP的功能。
以上只是我的设想,因为时间的原因,还没有动手去实现,如果大家有更好的建议,可以一起来探讨。
转载于:https://www.cnblogs.com/linckle/archive/2007/07/13/817321.html
DotText源码阅读(7) --Pingback/TrackBack相关推荐
- 推荐系列文章:《DotText源码阅读》
DotText源码阅读 作者:shanhe DotText源码阅读(0) DotText源码阅读(1)-调试 DotText源码阅读(2)-工程.数据库表结构 DotText源码阅读(3)-框架配置体 ...
- DotText源码阅读(2)-工程、数据库表结构
首先,来看整个工程结构,在此间单列出来,其中很多是初次阅读写下的,可能有些理解不正确,需要注意: 一.解决方案的组成项目 a) Dottext.Web 引用了: ActiproSoftw ...
- [导入]DotText源码阅读(2)-工程、数据库表结构
包括了工程结构说明和数据库表格说明,大致了解以上可以帮助我们后面的阅读理解. 文章来源:http://blog.csdn.net/shanhe/archive/2006/05/04/707482.as ...
- DotText源码学习——ASP.NET的工作机制
--本文是<项目驱动学习--DotText源码学习>系列的第一篇文章,在这之后会持续发表相关的文章. 概论 在阅读DotText源码之前,让我们首先了解一下ASP.NET的工作机制,可以使 ...
- 源码阅读工具 UnderStand
源码阅读工具 UnderStand 特色: 1.支持多语言:Ada, C, C++, C#, Java, FORTRAN, Delphi, Jovial, and PL/M ,混合语言的project ...
- 应用监控CAT之cat-client源码阅读(一)
CAT 由大众点评开发的,基于 Java 的实时应用监控平台,包括实时应用监控,业务监控.对于及时发现线上问题非常有用.(不知道大家有没有在用) 应用自然是最初级的,用完之后,还想了解下其背后的原理, ...
- centos下将vim配置为强大的源码阅读器
每日杂事缠身,让自己在不断得烦扰之后终于有了自己的清静时光来熟悉一下我的工具,每次熟悉源码都需要先在windows端改好,拖到linux端,再编译.出现问题,还得重新回到windows端,这个过程太耗 ...
- 源码阅读:AFNetworking(十六)——UIWebView+AFNetworking
该文章阅读的AFNetworking的版本为3.2.0. 这个分类提供了对请求周期进行控制的方法,包括进度监控.成功和失败的回调. 1.接口文件 1.1.属性 /**网络会话管理者对象*/ @prop ...
- 源码阅读:SDWebImage(六)——SDWebImageCoderHelper
该文章阅读的SDWebImage的版本为4.3.3. 这个类提供了四个方法,这四个方法可分为两类,一类是动图处理,一类是图像方向处理. 1.私有函数 先来看一下这个类里的两个函数 /**这个函数是计算 ...
最新文章
- Nature Methods | 用深度多任务神经网络探索单细胞数据
- __cpuidex读取CPU序列号
- MySQL服务器的构建与维护
- 《js高级程序设计》6.1.1-6.1.3——数据属性、访问器属性
- #if defined(__cplusplus)
- python tcl smb_python操作samba
- tensorflow版本及其对应环境
- mybatis注解开发_Spring Boot 中集成 MyBatis
- php+mysql案例含源码_[源码和文档分享]基于PHP和MYSQL数据库实现的失物招领系统...
- configparser读取含有中文的配置(Windows)
- 2020-09-07(基于控制台的DVD管理系统)
- 基于EasyX图形库的天天爱消除
- 代码库_单精度浮点减法器
- GLES2.0中文API-glUniform
- 顺祝商祺 - 顺颂商祺
- 用C++实现的高性能WEB服务器
- 前端实现的一组印章在线设计生成工具集,支持高清镂空的印章图片生成下载
- vue-js-cookie
- TP-LINK已经设置了端口映射但是外网还是访问不了服务器的问题解决
- IT面试时注意的一些问题
热门文章
- 话剧《白鹿原》:叫人乍舌,令人唏嘘,也让人捏把汗(图)
- 基于Verilog的按键控制LED灯
- 自学考试c语言真题,自学考试《C语言程序设计》练习题及答案
- php实现跑马灯闪亮,易达CMS实现跑马灯特效!
- java实体设置扩展属性setextattributes_transactionAttributes各属性意义及配置
- 修改pytho2安装插件的位置_office2016自定义安装以及修改安装位置
- 创建时间指定日期 java,Java避坑之如何创建指定时间Date对象
- 京东五星电器送扫地机器人_家电也流行“套餐”,京东五星电器吹响国庆家装“集结号”...
- 人工神经网络——笔记摘抄2
- mysql 和 sqlserver sql差异比较