首页 > 技术文章 > request redirection

tnyleyon 2018-08-21 15:25 原文

# encoding:utf-8

import re
import json
import random
from esdapi.config import BASE_URL
from requests.sessions import Session


class Ad09(object):
def __init__(self):
"""
初始化session 并设置header和cookie
"""
self.url = "http://xxxx/ad09/index"
self.s = Session()
self.s.headers.setdefault("Content_type", "application/x-www-form-urlencoded")
self.s.headers.update(Referer="http://172.21.2.3:8009/ad09")
self.s.cookies.update(self.get_cookies(self.url)[0])

# self.s.headers.update({"Cookies": self.get_cookies()})

def get_cookies(self,url):
"""
获取上一次请求的cookie
:return: 返回cookie dict
"""
r = self.s.get(url)
print(r.cookies.get_dict())
return (r.cookies.get_dict(), r.text)

def get_token(self):
"""
获取上一次请求隐匿的表单token
:return:
"""
pattern = 'name="__RequestVerificationToken" type="hidden" value="(.*)"'
p = re.compile(pattern)
text = self.get_cookies(self.url)[1]
if p.search(text):
token = p.search(text).groups()[0]
token = token.__str__().strip('"')
else:
return
return token

def get_mobile(self):
s = "144"
n = range(10)
for i in range(8):
s += random.choice(n).__str__()
if len(s) == 4 and s == "1442":
s = (int(s) - 1).__str__()
print(s)
return s

def Ad09_index(self):
param = {"__RequestVerificationToken": self.get_token(),
"FromPage": "ZaEsd-Ad09-",
"FromSE": "",
"CustomerId": "",
"ProductType": "all",
"Amounts": 50000,
"LoanTerm": 24,
"Name": u"测试",
"Mobile": self.get_mobile(),
"Province": "31b25d9c-912d-4db9-82ab-10d87a2885b3",
"City": "92ce2049-36bf-4ae6-b831-22359c38f337",
"hiddenLoanPurpose": 0,
"hiddenLoanPurposeDetail": "{8132707A-E2AE-4F58-85FC-F023277D845B}"}
r = self.s.post(self.url, data=param, allow_redirects=False)
print("Location url is:", r.headers["Location"])
try:
return (r.headers["Location"], json.loads(r.text))
except:
return (r.headers["Location"], r.text)

def get_Estimate(self):
path = self.Ad09_index()[0]
url = BASE_URL + path
r = self.s.get(url)
print(r.text)
return r.text


if __name__ == '__main__':
print(Ad09().get_Estimate())

推荐阅读