1. 程式人生 > >使用fiddler抓取app資料

使用fiddler抓取app資料

本文簡單展示如何用Python抓取APP資料,以超級課程表樹洞為例:

首先:需要下載抓包神器:fiddler

直接百度下載,然後打來fiddler設定幾個選項:

選中"Decrpt HTTPS traffic",    Fiddler就可以截獲HTTPS請求
選中"Allow remote computers to connect".  是允許別的機器把HTTP/HTTPS請求傳送到Fiddler上來,記得重新啟動。

然後記住port:8888,windows 開啟cmd輸入 ipconfig查到自己的IP 然後去開啟手機的網路代理設定:

安卓的:

確定一下手機和PC是連線在同一個區域網中

進入手機的設定->點選進入WLAN設定->選擇連線到的無線網,長按彈出選項框 輸入自己的ip和port

 

將代理設定成手動,將上面獲取到的ip地址和埠號填入,點選儲存。這樣就將我們的手機設定成功了。

使用Android手機的瀏覽器開啟:http://【IP】:8888, 點"FiddlerRoot certificate" 然後安裝證書,如圖:

蘋果的在無限網右側歎號出點擊輸入代理;不需要安裝證書 這樣fiddler就可以抓手機的包了

得到超級課程表登入的地址:http://120.55.151.61/V2/StudentSkip/loginCheckV4.action

    表單:

表單中包括了使用者名稱和密碼,當然都是加密過了的,還有一個裝置資訊,直接post過去就是。

    另外必須加header,很重要 這是模擬手機的請求,

from urllib import request,parse
import http.cookiejar
import json


c=http.cookiejar.CookieJar()
cookie=request.HTTPCookieProcessor(c)
#把這個儲存器繫結到opener裡
opener=request.build_opener(cookie)
request.install_opener(opener)


opener.addheaders = [('Connection','close'),('Content-Type','application/x-www-form-urlencoded; charset=utf-8'),
                     ('User-Agent','Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) '
                                   'AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15G77 -SuperFriday_9.4.1'),('Content-Length','338'),
                     ('Accept-Encoding','gzip'),('Connection','close')]
def login():
    url  = 'http://120.55.151.61:80/V2/StudentSkip/loginCheckV4.action'

    data = 'password=80ae7800f3602767a22913fd5351858d&account=09a41e3366274f2da3eb0163d161986b&registrationId=&ifa=737D0450-F735-4251-8306-5B03DD079D58&ifv=A4F8E2BF-1657-4C67-B615-2806C49571DE&versionNumber=9.4.1&platform=2&channel=AppStore&phoneVersion=11.4.1&phoneModel=iphone%205s%28Global%29%20%28A1457%2FA1518%2FA1528%2FA1530%29&phoneBrand=Apple'
    req = request.Request(url,data=data.encode())

    response = opener.open(req).read()
    if response:
        print('login success')

這是登陸資訊:

接下來得到了json串

手機點選話題,抓取請求,篩選出需要的資訊

接下來貼整個程式碼:

from urllib import request,parse
import http.cookiejar
import json


c=http.cookiejar.CookieJar()
cookie=request.HTTPCookieProcessor(c)
#把這個儲存器繫結到opener裡
opener=request.build_opener(cookie)
request.install_opener(opener)


opener.addheaders = [('Connection','close'),('Content-Type','application/x-www-form-urlencoded; charset=utf-8'),
                     ('User-Agent','Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) '
                                   'AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15G77 -SuperFriday_9.4.1'),('Content-Length','338'),
                     ('Accept-Encoding','gzip'),('Connection','close')]

def login():
    url  = 'http://120.55.151.61:80/V2/StudentSkip/loginCheckV4.action'

    data = 'password=80ae7800f3602767a22913fd5351858d&account=09a41e3366274f2da3eb0163d161986b&registrationId=&ifa=737D0450-F735-4251-8306-5B03DD079D58&ifv=A4F8E2BF-1657-4C67-B615-2806C49571DE&versionNumber=9.4.1&platform=2&channel=AppStore&phoneVersion=11.4.1&phoneModel=iphone%205s%28Global%29%20%28A1457%2FA1518%2FA1528%2FA1530%29&phoneBrand=Apple'
    req = request.Request(url,data=data.encode())

    response = opener.open(req).read()
    if response:
        print('login success')

def chat(timestampLong=0):
    url = 'http://120.55.151.61:80/Treehole/V4/Message/getListByType.action'
    data = 'type=1&timestamp={}&versionNumber=9.4.1&platform=2&channel=AppStore&phoneVersion=11.4.1&phoneModel=iphone%205s%28Global%29%20%28A1457%2FA1518%2FA1528%2FA1530%29&phoneBrand=Apple'.format(timestampLong)
    req = request.Request(url, data=data.encode())
    response = request.urlopen(req).read()
    parse_html(response.decode())

def parse_html(result):

    result = json.loads(result)
    print(result)
    if result['status']==1:
        print('success spider')
        timestampLong = result['data']['timestampLong']
        parse_one_page(result)
        chat(timestampLong)



def parse_one_page(result):
    for item in result['data']['listBO']['messageBOs']:
        print(item.get('schoolName','   '),item.get('content'))

#--獲取更多--

login()
chat()

貼上執行後截圖