1. 程式人生 > >在登入頁面點選登入之後頁面重定向了無數次,如何 用Python 拿到重定向前的 cookie

在登入頁面點選登入之後頁面重定向了無數次,如何 用Python 拿到重定向前的 cookie

關住 公 縱 號 “  阿蒙課程分享    ”  獲得學習資料及趣味分享 

# -*- coding:utf-8 -*-  
# author:murongtiedan
# updatetime:2018/3/14
# 功能:爬蟲之模擬登入,urllib和requests都用了...  
問題背景:
在登入頁面點選登入之後頁面重定向了無數次,想獲取某次重定向前的頁面的 cookie 作為後來值應用
import urllib2
import requests
import re



headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'
, # 'Referer':'http://cas.oa.ops:8083/cas/login?service=http://10.40.10.165:40992/war-cwd-transaction-ser/sso/user/redirect' } def get_verify_data(IP,PORT): loginURL = "http://cas.oa.ops:8083/cas/login?service=http://" + IP + ":" + PORT + "/war-cwd-transaction-ser/sso/user/redirect" # POST傳送到的網址 request = urllib2.Request(loginURL, headers
=headers) response = urllib2.urlopen(request) content = response.read() lt_pattern = re.compile(r'name="lt" value="(.*?)" />', re.S) #re.S 使 . 匹配包括換行在內的所有字元 ex_pattern = re.compile(r'name="execution" value="(.*?)" />', re.S) #re.S 使 . 匹配包括換行在內的所有字元 lt = re.findall(lt_pattern, content) execution = re.findall(ex_pattern, content) return
{'lt':lt[0],'execution':execution[0]} def get_cookie(*args): IP = args[0] PORT = args[1] if type(IP) != 'str': IP = str(IP) if type(PORT) != 'str': PORT = str(PORT) loginURL = "http://cas.oa.ops:8083/cas/login?service=http://"+ IP +":"+ PORT +"/war-cwd-transaction-ser/sso/user/redirect" # POST傳送到的網址 verify_data = get_verify_data(IP,PORT) data = { "username": "xiatian", "password": "xiatian123", "lt": verify_data['lt'], "execution": verify_data['execution'], "_eventId": 'submit', 'submit': '登入' } s = requests.session() login = s.post(loginURL, data=data, headers=headers,allow_redirects= False) # 傳送登入資訊,返回響應資訊(包含cookie) # print(login.headers) cookie = s.get(login.headers['Location'], data=data, headers=headers, allow_redirects=False) # 傳送登入資訊,返回響應資訊(包含cookie) # print(cookie.headers) return {'cookie':cookie.headers['Set-Cookie'].split('=')[1].split(';')[0]} print(get_cookie('10.40.10.165','40992'))