Python3.5.2模拟网站登陆
来源:互联网 发布:运20和伊尔76数据对比 编辑:程序博客网 时间:2024/05/16 13:45
Python3.5.2模拟网站登陆
最近在學習 Python 的過程中, 有一個作業是使用 Python 實現模擬網站登陸, 因為以前沒有弄過, 花費了幾天的時間, 特地記下關鍵知識點, 備以后所需
工具
1) Fiddler 4.6
2) Firefox 瀏覽器
3) Python 3.5.2
4) Windows 7 (在 Linux 下也基本一樣)
步驟
1) 執行 Fiddler 獲取瀏覽器數據(按 F12 開啟 Capturing)
網上很多人使用 Firefox 自帶 Firebug 組件, 但我使用的版本抓不到 POST 的信息
如果你對 Wireshark 使用很熟悉, 也可以用 Wireshark, 能抓到的更完整的信息,但要求掌握網絡底層知識
2)使用 Firefox 瀏覽器打開要登陸的網站, 進行實際登陸, 使 Fiddle 能抓取到整個登陸的過程.
使用前最好清除瀏覽器的歷史記錄, 以便 Fiddle 能抓到最少又有用的信息
(1) Request Headers
操作類型: GET 還是 POST, URL, Client 信息, Cookies, Referer, Connection, Host 等信息
(2) WebForms
3) 使用 Python 模擬登陸
GET 請求
使用 urllib.request
#注意: url 最后要以 / 結尾, 否則報錯url = "http://www.abc.com/" req = urllib.request.Request(url)
使用 http.client
conn = http.client.HTTPConnection("www.cjol.com", 80)
conn.request('GET', url, data, headers)
使用之前對 data, headers 賦值
data = urllib.parse.urlencode({'jsoncallback':'jQuery17202103447694222xxxx_147761832xxxx','userName':'xxxxx','password':'xxxxx','actionType':'xxxxx','_':'xxxxx'})header = {"Accept":"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01","Accept-Encoding":"gzip, deflate","Accept-Language":"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3","User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0","X-Requested-With":"XMLHttpRequest","Cookie":"Hm_lpvt_36534f4826de8bde820fa4722f1fa7e8=1477618344; Hm_lvt_36534f4826de8bde820fa4722f1fa7e8=1477558656,1477618344; isFirstLoad=1","Referer":"http://www.cjol.com/","Connection":"keep-alive","host":"www.cjol.com"}
POST 請求
使用 urllib.request
url = "http://www.abc.com/"data = urllib.parse.urlencode({"key1":"value1","key2":"value2"}).encode('utf-8')header = {"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Encoding":"gzip, deflate","Accept-Language":"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3","User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0"}req = urllib.request.Request(url, data, header)
從代碼可以看出來, 相對于 GET 操作, urllib.request.Request 增加了data 和 header 參數,
實際上, 只要增加了 data 參數, 系統就會當成 POST 操作
如果需要執行帶提交 header 的 GET操作建議使用以下方式,
url = "http://www.abc.com/"req = urllib.request.Request(url)req.add_header("Accept", "*/*")req.add_header("Accept-Encoding", "gzip, deflate")urllib.request.urlopen(req)
如果需要執行 帶提交 data 和 header 的 GET 操作, 建議使用 http.client
使用 http.client
conn = http.client.HTTPConnection(url1, 80)
conn.request('POST', '/', data, header)
讀取返回頁面
使用 urllib.request
response = urllib.reqest.urlopen(req)
使用 http.client
response = conn.getresponse()
get_header = response.getheader('Set-Cookie')
將頁面保存到文件
get_page = response.read()fp = open('d:\\get_page.txt', 'wb')fp.write(get_page)fp.close()
比如刷新簡歷和讀取任務清單 等等.
開發者如果在登陸通訊的過程中增加驗證碼, 或者寫一些驗證函數, 就可以增加模擬登錄的困難.
重點記錄
一) ASP.NET 2.0 安全驗證機制, 暫時發現以下兩點
1) 第一次打開網站會在返回 Header 里包含 sessionid, 后面的操作要求把 sessionid 放在 header 里一起提交
2) 第一次打開網站會在返回頁面里包含 __VIEWSTATE 和 __EVENTVALIDATION,
下一次操作要把這兩個參數作為 Webform data 提交
需要用到讀取網頁, 從頁面中提取 __VIEWSTATE 和 __EVENTVALIDATION 的值
二) Connection: keep-alive
這個 Headers 項, 并不是包含在 Headers 里提交就一定能夠實現 keep-alive 的
比如 urllib.request 就不能實現 keep-alive, 但 http.client 可以.
使用 http.client 時發現 Fiddler 抓取不到數據, (網上有些文章提到模擬 Fiddler 代理 http.client 后就可以抓到包了,有時間可以試一下)
其實沒有太多影響, 因為可以通過 response.read() 讀取返回頁面 和 getheader() 讀取返回 headers,
如果 keep-alive 失敗, 則在返回的 header 中包含 Connection: close,
如果 keep-alive 成功, 則在返回的 header 中不會包含 Connection 項,
因此, 根據讀取返回 Header 的 Connection 值,如果為 None 則表示 keep-alive 成功.
0 0
- Python3.5.2模拟网站登陆
- python3.5模拟登陆
- 模拟网站登陆
- Winform模拟登陆网站
- Wininet模拟登陆网站
- python模拟登陆网站
- C# 模拟网站登陆
- python模拟网站登陆
- PHP网站模拟登陆
- 利用python3模拟访问网站
- python3 爬虫 模拟登陆豆瓣修改签名
- Python3网络爬虫:使用Cookie-模拟登陆
- 模拟登陆教务处网站C#
- Python模拟浏览器登陆网站
- Python模拟用户登陆网站
- Python模拟浏览器登陆网站
- Python3网络爬虫(3):Python3使用Cookie-模拟登陆
- Python3.4 暴力登陆(扫描)网站 工具
- 配置Sublime Text 2 的Python运行环境
- 5.java设计模式(读书笔记)单例模式
- 2134 数据结构实验之栈四:括号匹配
- Deep Learning(深度学习)学习笔记整理系列之(五)
- brctl桥接
- Python3.5.2模拟网站登陆
- Android Notification Sound 特性
- 让你的Python代码更加pythonic
- sudo配置临时取得root权限
- Deep Learning(深度学习)学习笔记整理系列之(六)
- CocoaPods报错:The dependency `AFNetworking ` is not used in any concrete target
- SegmentFault 2016 开发者大会 - 北京「Security」——开启全国性技术大会
- 3332 数据结构实验之栈五:下一较大值(一)
- poj 3398 Perfect Service