小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

防爬總結(jié)

 kittywei 2012-02-21

一、針對Http協(xié)議

在瀏覽器訪問網(wǎng)站的時候伴隨著相關(guān)的Http協(xié)議

User-Agent:用戶瀏覽器與版本信息

如:Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)

Referer:請求URL的源地址

如果用戶直接請求URL時則Referer不能被發(fā)送顯示。

Cookie:用于辨別用戶身份,存儲在用戶的數(shù)據(jù)

在用戶瀏覽網(wǎng)站網(wǎng)頁時,首次訪問時,服務(wù)端可以給它添加默認值,通過這個值了解用戶登錄信息。

根據(jù)一般程序編寫的爬蟲器不會添加User-AgentReferer,Cookie等方面制定規(guī)則,過濾一些簡單的程序爬蟲。

二、針對IP訪問

如果不考慮HTTP方面對爬蟲的過濾。

爬蟲 有可能頻繁訪問網(wǎng)站影響網(wǎng)站性能,我們可以制定規(guī)則應(yīng)對這部分的爬蟲。

獲得IP的地址有幾種可能性:

1、  IP地址為本機真實IP,

2、  IP地址為代理服務(wù)器提供的IP

3、  IP地址經(jīng)過多個代理服務(wù)器后的多個IP地址

在這次針對IP訪問的防爬制定的規(guī)則是:

A、 判斷是否通過代理IP,

B、 如果沒有通過代理IP 則記錄用戶IP

C、 如果通過代理IP,繼續(xù)判斷是否有多個代理IP

D、 我們這里只選擇記錄第一個代理IP

判斷是否有代理IP可以使用:HTTP_X_FORWARDED_FOR 進行判斷

用戶本地IP 可以通過REMOTE_ADDR 或者UserHostAddress屬性獲得

記錄了IP后,我們可以制定策略,防止在一段時間中IP的頻繁訪問。

這里基于IP 所占用的字節(jié)不多,選擇將IP 訪問次數(shù) 存儲在Cache里面,并讓Cache的失效基于相對時間。

Cache方面的選擇:

Cache除了頁面的緩存不用考慮外

HttpContext.Current.Items   基于上下文的緩存,在頁面刷新后失效也不考慮

HttpContext.Current.Cache 為當前 HTTP 請求獲取Cache對象 只能在Web使用

HttpRuntime.Cache 獲取當前應(yīng)用程序的Cache  Web 與非Web都可以使用

企業(yè)庫緩存 

這里我們選擇了程序里面已經(jīng)有了的企業(yè)庫緩存來做為存儲。

 

三、針對IP 并發(fā)

考慮到有可能出現(xiàn)多線程并發(fā)行為,我們需要針對并發(fā)問題制定相關(guān)策略

這里選擇當并發(fā)行為超過一定次數(shù)就觸動并發(fā),并將并發(fā)的次數(shù)寫入緩存中

緩存方面選擇使用HttpContext.Current.Cache,緩存的寫入與針對IP區(qū)別不大都是基于相對時間。

編寫方式如:

HttpContext.Current.Cache.Add(IpNumberName,i,null,System.Web.Caching.Cache.NoAbsoluteExpiration,new TimeSpan(0,0,0),System.Web.Caching.CacheItemPriority.High,null)

程序里阻止同時寫入緩存的現(xiàn)象,通過lock將緩存寫入時其他線程阻塞在外面。

四、針對Cookie

Cookie方面的策略與上面的二、三策略相似,在這里就不再重復(fù)了。

在判斷用戶本地是否有Cookie值,如果沒有Cookie就同賦予值。如果有記錄次數(shù),存儲在企業(yè)庫緩存中。

下面是添加Cookie的相關(guān)程序

HttpCookie cookie = new HttpCookie(CookieName, cookiesGuid);

 cookie.Expires.AddMinutes(30);

 Response.AppendCookie(cookie);

 

總結(jié)

以上是在這次的防爬編寫程序中所學(xué)到與有所應(yīng)用的相關(guān)策略。

所學(xué)收獲:在這次防爬里對企業(yè)庫緩存的編寫,HttpContext.Current.Cache ,HttpRuntime.Cache,HTTP的請求頭的方法有多了一丁點了解。

依然不解: 忘記了Serializable HttpContext.Current.Cache ,HttpRuntime.Cache 里面使用的話哪個會出現(xiàn)問題?

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多