經過這幾天的學習,手動實驗成功post登錄網易,特做如下記錄:
總體流程如下:
1.抓取登錄是發送的http數據包,分析其內容:
可以看到請求類型爲POST,也可以看到發送的參數,構造數據包如下:
cookie = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
posturl = 'https://reg.163.com/logins.jsp'
headers ={'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0',
'Referer' : 'http://www.163.com/'}
postdata={"username":"[email protected]",
"password":"XXXXXXXXXXXXX",
"type":"1",
"product":"163",
"savelogin":"0",
"url":"http://www.163.com/special/0077450P/login_frame.html",
"url2":"http://www.163.com/special/0077450P/login_frame.html",
"noRedirect":"1"}
這裏我們使用了cookie,爲的是登錄後可以使用保存在opener 中的coolie,直接取訪問需要登錄的頁面。
2.數據包構造好後我們就使用urllib2.Reques構造請求對象;
req = urllib2.Request(posturl, data, headers)
3.構造後請求對象後使用response = opener.open(req);獲取迴應體;
登錄成功後我們就可以利用已經獲取的cookie直接訪問 需要登錄後纔可以訪問的頁面了。