get请求
res = requests.get(url)
res = requests.get(url, parameter, headers)
post请求
res = requests.post(url, json=data, headers)
requests.session发送请求
- session发送请求的话,和用户手动点击页面是一样的,session会把上一个请求的数据带入到下一个。
- 例如一些登陆接口,经常都是通过session请求因为它会保留上下文会话信息,而requests.post是单次请求不会记录任何东西
import requests
# 通用方法,获取cas登录之后service对应的ticket
class CasLogin(object):
CAS_LOGIN_URL = HostsEnum.CasLoginUrl.value
@classmethod
def getLoginTicket(cls, service, username, password):
cas_session = request.session()
page = cas_session.get(cas_login_url, headers)
info = re.search(
'(?s)统一用户认证中心.+?action="(?P<action>.+?)".+?name="lt" value="(?P<lt>.+?)".+?name="_eventId" '
'value="(?P<_eventId>.+?)".+?name="iddds" value="(?P<iddds>.+?)"',
page.text,
).groupdict()
# 2、post请求cas登录接口,获取登录成功后cas返回的ticket
cas_login_data = {
"action": info["action"],
"lt": info["lt"],
"_eventId": info["_eventId"],
"qrcodeId": "",
"iddds": info["iddds"],
"username": username,
"password": password,
"verifyCode": "1",
# "keyid": keyid # 可以不传keyid
}
resp = cas_session.post(
cls.CAS_LOGIN_URL,
params={"service": service},
data=cas_login_data,
headers={"Content-Type": "application/x-www-form-urlencoded"},
allow_redirects=False,
)
location = resp.headers.get("Location")
if "ticket" in location:
# print("获取cas登录ticket成功。", location)
# 返回ticket
return resp.headers.get("Location").split("=")[-1]
else:
print("获取cas登录ticket失败。", location)
return ""