Cookie和Post模擬登陸
藉助Chrome直接獲取到Cookie,不過這種方式有侷限性,並不如Fiddler通用,有一些網站使用這種方式獲取的Cookie無法登入。
經過測試,這種方式對知乎有效。
在已經登入知乎的情況下,開啟開發者工具,定位到 Network 選顯示卡,然後重新整理網頁,在載入的內容中,隨便選擇一項,然後看右側的資料,如下圖所示:
在右側的Request Headers下面,你可以找到Cookie這一項,它後面的一長串資料就是我們需要的Cookie。
請注意這裡一定要是”Request Headers”,不要選成了”Response Headers”。
使用這種方式獲取的Cookie比使用Fiddler獲取的Cookie要長几十個字元,不過不影響正常使用。以下是獲取知乎回答的一個例子:
原始碼中出現了“私信”和“我的首頁”這兩連結,說明是以登入的身份獲取的原始碼。
我們現在已經有這一段“登入後”的Cookie了,所以如果我們的指令碼訪問網站的時候,把這段程式碼一併提交上去,就可以讓網站以為我們已經登入過,於是直接顯示登入後的內容。
使用Cookie來登入網頁,有時候可以直接繞過網站的驗證碼。
藉助requests的Session模組,我們可以用幾行程式碼加Cookie來實現登入知乎。
session = requests.Session()
cookie = {'Cookie': '一長串文字'}
html = session.get('網址', cookies=cookie).content
print(html.decode())
獲取網頁的時候,網址可以隨便修改,只要保證每次都有cookies=cookie這個引數,就可以正常訪問登入以後才能訪問的頁面。
Post模擬登陸
在之前的課程中,我們主要使用了requests的get方法來直接獲取網頁的內容。支援GET方法的網頁,接受我們的URL, 從URL裡面取出引數,然後再將結果返回給瀏覽器。由於URL的長度是有限制的,所以只能接收少量的引數。而支援POST方法的網頁,可以傳遞大量的引數和大量的資訊。如果一個網頁只支援POST方法,那這個網頁是沒有辦法在瀏覽器裡面直接輸入網址訪問的。requests的post方法支援將引數以POST方式提交給網頁,並得到網頁的返回資訊。
大多數的網站,登入的使用者名稱和密碼都是通過POST方式提交給伺服器的,因此如果可以模擬網站的這個提交行為,就可以模擬登入網站。
我們首先進入知乎的登入頁面,開啟Chrome的開發者工具的Network選項卡,勾選“Preserve log”並故意輸入錯誤的賬號和密碼嘗試登入,從Chrome抓取到的資料中我們可以找到我們需要的資訊:
從以上兩張圖中,我們可以看到,當我們點選了登入按鈕以後,程式會將圖二紅框中的Form Data下面四個資料使用POST方式傳送給圖一紅框中的https://www.zhihu.com/login/email 這個URL。
上圖中的Form Data,後三項的意義顯而易見,email: 郵箱, password: 密碼, remember_me: 記住我。但是第一項”_xsrf”是什麼意思?它後面的一長串資料是哪裡來的?
這個時候大家開啟登入頁面的原始碼,你將會找到這樣內容:
那麼事情就簡單了,使用正則表示式或者XPath先從原始碼裡面把這個xsrf提取出來,然後再和登入資訊一起提交即可。
還有一點需要注意:在Form Data中,remember_me後面的值是true, 首字母是小寫的。但是在Python裡面的布林值True, 首字母需要大寫。
在一般情況下是不需要使用驗證碼登入的,所以只需要提供圖二列出的資訊,將它們寫成一個字典並POST提交就能實現登入。那麼如果遇到驗證碼怎麼辦呢?後面我們會有專門的課程將驗證碼的處理。
現在,我們已經知道了登入知乎的原理,於是就可以通過程式碼來實現登入。核心程式碼如下:
data = {'_xsrf': xsrf, 'email': '郵箱', 'password': '密碼',
'remember_me': True}
session = requests.Session()
result = session.post('https://www.zhihu.com/login/email', headers=header, data=data) #這裡的result是一個json格式的字串,裡面包含了登入結果
之後訪問知乎的其他頁面,只需要使用session.get(‘網址’, headers=header)這種格式
front_page = session.get(‘https://www.zhihu.com‘, headers=header)
print(front_page.content.decode())
其執行效果如下圖所示:
網址返回的登入結果是登入成功,並且檢視原始碼可以證明是登入成功。
對於其他的網站,整個流程是完全一樣的,只是POST提交的引數各有不同。有些網址只需要POST提交使用者名稱和密碼就可以了,而另外一些網址,可能還需要從原始碼裡面提取更多的引數
模擬登陸豆瓣程式碼
import requests
import re
login_url = 'https://accounts.douban.com/login'
user_url = 'https://www.douban.com/people/{}/'
email = '[email protected]'
password = '8888888'
data = {'source': None,
'redir': 'https://www.douban.com/',
'form_email': email,
'form_password': password,
'remember': 'on',
'login': '登入'}
header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}
session = requests.Session()
html = session.get(login_url, headers=header).content.decode()
captcha_url = re.findall('id="captcha_image" src="(.*?)"', html, re.S) #獲取驗證碼url
if captcha_url:
captcha_url = captcha_url[0]
captcha_id = re.findall('name="captcha-id" value="(.*?)"', html, re.S)[0] #獲取驗證碼ID
with open('captcha.png', 'wb') as f:
f.write(requests.get(captcha_url).content)
captcha_solution = input('captcha code is:')
data['captcha-solution'] = captcha_solution
data['captcha-id'] = captcha_id
result = session.post(login_url, data=data, headers=header).content
user_id = input('請輸入使用者id:')
while user_id != 'exit':
user_info = session.get(user_url.format(user_id)).content
print(re.findall('title>(.*?)</title', user_info.decode(), re.S)[0])
user_id = input('請輸入使用者id:')
相關推薦
Cookie和Post模擬登陸
藉助Chrome直接獲取到Cookie,不過這種方式有侷限性,並不如Fiddler通用,有一些網站使用這種方式獲取的Cookie無法登入。 經過測試,這種方式對知乎有效。 在已經登入知乎的情況下,開啟開發者工具,定位到 Network 選顯示卡,然後重新整理
ab傳送cookie和post請求的方法
ab是apache自帶的壓力測試工具,近期需要壓測一個介面,涉及使用post請求,並在其中帶cookie。方法總結如下: 1. 傳送cookie 方法1 -C key1=value1;key2=value2... 例: ab -n 1
為Boost ASIO的http server4例子新增Cookie和Post/Get引數提取支援
Cookie和Post/Get引數支援 Author: kagula Date: 2016-12-28 Cookie的支援 如何呼叫 第一步:所有的TCP請求加入下面的程式碼 若session不存在,會返回一個新的sessionid std::string sessio
25 API-GUI(事件監聽機制,介面卡模式),Netbeans的概述和使用(模擬登陸註冊GUI版)
1:GUI(瞭解) (1)使用者圖形介面GUI:方便直觀CLI:需要記憶一下命令,麻煩(2)兩個包:java.awt:和系統關聯較強 ,屬重量級控制元件javax.swing:純Java編寫,增強了移植性,屬輕量級控制元件。(3)GUI的繼承體系元件:元件就是物件容器元
HttpClient 4.1.3 初學篇---使用Get和Post模擬登入簡單頁面(分別帶引數)
最近需要解決的問題需要用到Httpclient,模擬登陸網站!成功之後就可以用程式碼的方式獲取網站內容或者傳送請求,類似網路爬蟲。 但是在網上找了好多篇Blog,發現每一片的寫法都不一樣,也糾結了些時間,很納悶,才發現Httpclient版本不一樣。。。現在
python全棧系列之---cookie模擬登陸和模擬session原理
ger -c AD log print imp 數據庫 sta 這一 cookie模擬登陸: import tornado.web class IndexHandler(tornado.web.RequestHandler): def get(self):
模擬登陸CSDN -- Python爬蟲練習之正則表示式和cookie
這周學習的主題是正則表示式和cookie,原本是計劃每天晚上11點下班到家,練上一兩個鍾就把這部分過了,結果這周各種事情和不再狀態,所以沒整完,直至今天才把相關問題過掉。其實這部分也挺不錯的,也並沒有想象中容易,所以好事多磨。這周練習的綜合習題就是模擬登陸C
關於模擬登陸的小結-抓包、cookie、session和token
概述 上個星期根據bcloud寫了個Java版本的登陸專案。其實本來時想做個Linux的百度雲登陸軟體,但是做到獲取bdstoken的時候出了問題解決不了。後來我把bcloud專案下了下來用發現也有問題,應該是百度登陸的過程有了一些改動。通過 web抓包找到一些線索,
使用httpclient4.3.X模擬post請求登陸網站獲取cookie資訊的操作
眾所周知,httpclient可以模擬登陸操作,下面我就來個例項測試一下,順便也回憶下這個開源工具的使用,直接上例子吧! package com.pyc.search.crawler.node.login; import java.io.IO
PHP中常用的超全局變量 表單中get和post提交方式的區別 session與cookie的區別 GD庫是做什麽用的
屬性 過程 生成報表 用戶訪問 服務器 接收 file pla request PHP中常用的超全局變量 $_GET ----->get傳送方式$_POST ----->post傳送方式$_REQUEST ----->可以接收到get和post兩種方式的值
20170717_python爬蟲之requests+cookie模擬登陸
ssi alert 之前 lose net .html .net 裝載 onos 在成功登陸之前,失敗了十幾次。完全找不到是什麽原因導致被網站判斷cookie是無效的。 直到用了firefox的httpfox之後才發現cookie裏還有一個ASP.NET_SessionI
使用Post方法模擬登陸爬取網頁(轉)
source tin -m quest exc agen false buffered void 使用Post方法模擬登陸爬取網頁 最近弄爬蟲,遇到的一個問題就是如何使用post方法模擬登陸爬取網頁。下面是極簡版的代碼: import java
Golang中http請求設定cookie和header(包括GET和POST請求)
//http請求 func httpHandle(method, urlVal,data string) { client := &http.Client{} var req *http.Request if data == "" { urlArr := strings.Sp
22.天眼查cookie模擬登陸采集數據
cat from undefined 地址 answer Language ase 圖片 count 通過賬號登錄獲取cookies,模擬登錄(前提有天眼查賬號),會員賬號可查看5000家,普通只是100家,同時也要設置一定的反爬措施以防賬號被封。拿有權限的賬號去獲取co
PHP中使用CURL實現模擬GET和POST請求,親測完美解決
//初始化 $curl = curl_init(); //設定抓取的url curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com'); //設定標頭檔案的資訊作為資料流輸出 curl_setopt($cur
GET和POST的區別,Cookie和Session的區別和聯絡,
1.GET和POST的區別 A. 從字面意思和HTTP的規範來看,GET用於獲取資源資訊而POST是用來更新資源資訊。 B. GET提交請求的資料實體會放在URL的後面,用?來分割,引數用&連線,舉個栗子:/index.html?name=wang&login=1
cookie和session實現免登陸
Cookie的機制 Cookie是瀏覽器(User Agent)訪問一些網站後,這些網站存放在客戶端的一組資料,用於使網站等跟蹤使用者,實現使用者自定義功能。 Cookie的Domain和Path屬性標識了這個Cookie是哪一個網站傳送給瀏覽器的;Cookie的Expires屬性標識了Co
網頁爬蟲-通過已登入後的cookie,模擬登陸狀態,保持會話進行後續操作
剛開始的時候打算使用java程式直接登陸網站在進行後續操作,後來發現有些網站的重定向太多不好操作, 所以改用已登入的cookie 來保持會話, 使用方式很簡單,只需要在瀏覽器上登入你要操作的網站,然後獲取cookie值,將cookie放到程式裡就實現了儲存會話的功能了, 1、新增mave
PythonScript_003_通過Cookie模擬登陸人人網
#!/usr/bin/env python # -*- coding:utf-8 -*- import urllib.request import http.cookiejar # 相當於Python2的cookielib ''' 通過Cookie模擬登陸人人網,獲取請求 總結:1、POS
session和selenium+PhantomJS模擬登陸v2ex
session方式登入 def parse_url(self, url): response = requests.get(url=url, headers=self.headers)