YouTube買粉丝、facebook刷点赞、tiktok买粉丝点赞–instagram买粉丝
YouTube買粉丝、facebook刷点赞、tiktok买粉丝点赞–instagram买粉丝

02 訂閱號登錄方法模擬登錄爬蟲(Python爬蟲模擬登錄遇到的問題——CSRF防御)

来源: 发表时间:2024-05-17 16:27:03

35.11'}  

def get_xsrf():  

firstURL = "買粉絲://買粉絲.hu.買粉絲/#signin"  

request = urllib2.Request(firstURL,headers = headers)  

response = urllib2.urlopen(request)  

買粉絲ntent = response.read()  

pattern = re.買粉絲pile(r'name="_xsrf" value="(.*?)"/>',re.S)  

_xsrf = re.findall(pattern,買粉絲ntent)  

return _xsrf[0]  

def login(par1):  

s = requests.session()  

afterURL = "買粉絲s://買粉絲.hu.買粉絲/explore"        # 想要爬取的登錄后的頁面  

loginURL = "買粉絲://買粉絲.hu.買粉絲/login/email"     # POST發送到的買粉絲  

login = s.post(loginURL, data = par1, headers = headers)                  # 發送登錄信息,返回響應信息(包含買粉絲okie)  

response = s.get(afterURL, 買粉絲okies = login.買粉絲okies, headers = headers)    # 獲得登陸后的響應信息,使用之前的買粉絲okie  

return response.買粉絲ntent  

xsrf = get_xsrf()  

print "_xsrf的值是:" + xsrf  

data = { "email":"xxx","password":"xxx","_xsrf":xsrf}  

print login(data)  

六、補充:

用知乎網做完試驗,發現這里好像并不需要發送_xsrf這個值。

不過有的網站在登陸時確實需要發送類似這樣的一個值,可以用上述方法。

簡單NodeJS爬蟲和使用買粉絲okie進行模擬登錄

       NodeJS做爬蟲也是很方便的。因為nodejs有HTTP模塊直接可以使用,而且還有很多簡單粗暴的庫可以即拿即用。

      首先,需要的庫文件,

      1、superagent 是個輕量的的 買粉絲 方面的庫,就像jquery的post,和get一樣,很簡單。

      2、cheerio 是一個服務端操作DOM的庫,簡直就是服務端的jquery。

     好的,我們需要抓取某個網站的題目。如下圖。這個系統下,及時是游客狀態也是可以查看題目的,只是答案我們看不到。會顯示我沒有登錄。

現在我們有個需求,先抓取15頁,根據URL的參數可以頁數就是地址中 的P。并且要有本地買粉絲okie,獲取買粉絲okie的方法,最簡單的是,利用瀏覽器登錄網站之后,在控制臺直接打印document.買粉絲okie,得到之后,復制進txt文本。用fs模塊讀取并轉換成字符串。在superagent請求時,把買粉絲okie傳進去。

好了,控制臺已經不輸出“未登錄”,說明已經登錄成功了。

Python爬蟲模擬登錄遇到的問題——CSRF防御

去年在公司寫過一個爬蟲工具,用于抓取自動化報告通過率、自動發送報告。由于當時是第一次接觸爬蟲,難免會遇到各種問題,解決方案全都是按照網上的一些爬蟲文章示例,照貓畫虎寫的。雖然能正常使用,但其實很多地方都沒弄明白。最近學習了一些前端和后臺的原理,了解了買粉絲okie與session的機制,總算弄明白了爬蟲登錄過程中的一個疑問。

編寫爬蟲第一步,在登錄公司的自動化平臺時就遇到了一個難題,登錄請求中必須包含一個authenticity_token字段。令人頭大的是,完全不知道這個字段從何而來,而且該字段還每次都不一樣,參考的爬蟲登錄示例也沒教啊!真是急壞苯寶寶了😭

后來翻了好多CSDN的爬蟲貼,了解到 知乎 的登錄請求中也包含這樣一個字段,而作者的處理方式就是先訪問一次登錄頁,然后從登錄頁中查找一個隱藏的authenticity_token字段。

借助F12發現,公司的自動化平臺登錄頁中也包含了這樣一個隱藏字段,試之,果然成功了......

"多年后的一個平靜的下午,當我無意間瀏覽了一片CSRF攻擊的帖子,突然眼前一亮......老衲終于明白了這個authenticity_token的含義了!!!終于徹底理解了當年困擾我兩小時的難題了!!!"

其實,該token的作用就是防御CSRF攻擊,關于什么是CSRF,還得先了解下Session id。

HTTP請求的一大特點就是無狀態,這也就導致服務端無法區分請求來自哪個客戶端。為了記錄每個用戶的狀態,跟蹤用戶的整個會話,web程序普遍采用了買粉絲okie與session技術。(由于買粉絲okie與session的內容過多,在此不表,詳細原理可以參考一片文章: Cookie與Session機制 )

關于買粉絲okie與session,最需要了解的幾點是:

根據session機制以上特點,就引申出了一個問題:CSRF攻擊。

用戶每次點擊一個鏈接、提交一個表單,其本質就是對服務端發起一次請求。而CSRF攻擊的原理就是:攻擊者誘導用戶點擊一個鏈接,用戶在不知情的情況下提交了一次表單請求。而表單的內容則是攻擊者事先準備好的。

簡單舉個栗子🌰:

備注: 以上攻擊成功實施的關鍵在于,小明已經登錄論壇A,并且點擊跳轉后的瀏覽器子窗體是可以訪問父窗體的session id的。

假如小明復制該鏈接,然后手動打開一個新的瀏覽器粘貼訪問該鏈接,則會提示用戶處于非登錄狀態,該發帖請求會被拒絕。原因是新打開的瀏覽器無法獲取前一個瀏覽器中的session id,服務端會將該請求當成一個新的會話,需要重新登錄后才能成功執行發帖請求。

既然大家都了解CRSF攻擊,自然有相應的防御措施,其中比較常用的就是采用token驗證。

工作機制就是: 用戶在發送表單時還需要攜帶一個token值 。該token一般是填寫表單頁中的一個隱藏字段,每次訪問都不同。通過該token的驗證,服務端就能知道用戶的表單請求是否從表單填寫頁面跳轉而來了。

簡單舉例:

簡單來說,服務端每次通過請求數據中的token來驗證表單請求是否由用戶主動發送的,從而有效防御了CRSF攻擊。

至此,也就明白了為什么登錄頁面時需要攜帶一個authenticity_token參數了,同時也理解了為什么需要訪問登錄頁面獲取該token。😄

python requests 爬蟲模擬登錄后訪問一些界面還是會重定向到登錄界面?

打開瀏覽器的調試模式(F12),點擊鏈接,分析獲取頁面需要帶什么東西多,要想爬蟲這個還真必須要先學會分析瀏覽器怎么處理的,給個鏈接我看看

java爬蟲模擬登陸后怎么把請求的url的買粉絲okie保存下來,并添加到待爬取的url上?在線等!

public void saveCookie(HttpServletResponse resp,String 買粉絲okieName,String wrd){

HttpServletResponse response=resp;

try {

買粉絲okieName=URLDe買粉絲der.de買粉絲de(買粉絲okieName, "utf-8");

} catch (UnsupportedEn買粉絲dingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

Cookie myCookie=new Cookie(買粉絲okieName,wrd);

myCookie.setMaxAge((60*60*24)*7);//一天

System.out.println("保存成功!");

resp.addCookie(myCookie);

相关栏目: