import urllib.request
from http import cookiejar
from urllib import parse
login_url = 'https://pos.XXXXX.com/j_spring_security_check'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
}
data_form = {
'j_username': "188",
'j_password': "zha"
}
# 访问登录后的页面
center_url = 'https://pos.XXXXX.com/myprofile/myprofile.html'
# 第一种方法
# 将来调用的参数需要转码,post请求的data要求是bytes类型
print(parse.urlencode(data_form)) # j_username=188&j_password=zha,这是str类型
data_form = parse.urlencode(data_form).encode('utf-8')
# 创建cookiejar对象保存cookie
cook_jar = cookiejar.CookieJar()
# 定义有添加cookie功能的处理器
cook_handler = urllib.request.HTTPCookieProcessor(cook_jar)
# 根据处理器生成opener
opener = urllib.request.build_opener(cook_handler)
#发送post请求
login_request = urllib.request.Request(login_url,headers=headers,data=data_form)
# 如果登录成功,cookiejar则会保存cookie
opener.open(login_request)
center_request = urllib.request.Request(center_url,headers=headers)
response = opener.open(center_request)
data = response.read().decode()
with open('cookiejar.html', 'w', encoding='utf-8')as f:
f.write(data)
# 退出登录
opener.open('https://pos.XXXXX.com/j_spring_security_logout')
# 第二种方法
import requests
from lxml import etree
# requests.session():维持会话,可以让我们在跨请求时保存某些参数
session = requests.session()
# 尝试登录,如果登录成功
response = session.post(login_url,data=data_form, headers=headers)
if response.status_code == 200:
response = session.get(center_url,headers=headers)
if response.status_code == 200:
data = response.text
html = etree.HTML(data)
print(html.xpath('//*[@id="contentwrapper"]/form/p[1]/span/text()')[0].strip())
with open('session.html','w',encoding='utf-8')as f:
f.write(data)
# 退出登录
session.get('https://pos.XXXXX.com/j_spring_security_logout')