Jeesite使用requests模拟登录

    环境:Windows 7、python3.6

    使用 Jeesite 进行开发,因为更改代码后重新启动 Tomcat ,会话丢失会要求重新登录,验证成功后才能进行正常的访问,否则就会重定向到 login 页面。(先忽略掉“记住我”这个选项,主要是练手。。。)

    1、首先使用 pip 安装 requests:

pip install requests

    安装完成后 cmd 输入:python,进入命令界面:

>> import requests

>> requests.__version__
>> '2.8.14' #输出版本

    2、首先进入 Jeesite 登录界面,输入用户名和密码后点击登录,进入首页后进入浏览器调试模式(F12),查看网络一栏:

    其中的 Request Headers 是 http 头信息,FormData 是向后台提交的用户数据。

    3、开始撸代码:

import requests
import re
	
def login(baseUrl, userName, password):
	login_data = {
		'username' : userName,
		'password' : password
	}
	
	headers_base = {
		'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
		'Accept-Encoding':'gzip, deflate',
		'Accept-Language':'zh-CN,zh;q=0.8',
		'Cache-Control':'max-age=0',
		'Connection':'keep-alive',
		'Content-Length':'31',
		'Content-Type':'application/x-www-form-urlencoded',
		'Host':'localhost:8080',
		'Origin':'http://localhost:8080',
		'Referer':'http://localhost:8080/项目名/a/login',
		'Upgrade-Insecure-Requests':'1',
		'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
	}
	
	session = requests.session()
	content = session.post(baseUrl, headers = headers_base, data = login_data, allow_redirects=False)
	
	s = session.get("接口url", verify = False)
	print(s.json())

if __name__ == "__main__":
	url = "http://localhost:8080/项目名/a/login"
	login(url,"capinfo","admin")

    运行脚本文件: python test.py

    

    正常返回了 JSON 数据。

========================================

    如果要携带参数,需要上面的代码稍做修改:

s = session.get("接口url", verify = False)
更改为:
s = session.post("接口url", data = {"startYear":"2018","endYear":"2018"}, verify = False)

    后台 Java 方法:

    开始测试: python test.py

上图的运行并没有正确返回,Tomcat 415 错误:Unsupported Media Type,这个是因为没有定义头信息中的 content-Type,再次更改:

headers_interface = {
	'content-Type': 'application/json'
}

s = session.post("接口URL", headers = headers_interface, data = {"startYear":"2018","endYear":"2018"}, verify = False)

    更改后再次测试:python test.py

    返回了 400 ,将 log4j 的 springframework 的调试级别为 DEBUG:

#Springframework level
log4j.logger.org.springframework=DEBUG

    查看输出日志:

Could not read JSON: Unexpected character ('s' (code 115)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')

    应该是传输的 JSON 数据没有正确的解析,上网查了一下,使用下面的办法:

import json

###

params = {"startYear":"2018","endYear":"2018"}
	
s = session.post("接口URL", headers = headers_interface, data = json.dumps(params), verify = False)

    再次测试,终于正常。

    有疑问的是:为什么 data = json.dumps(params) 这种形式正常,而在 post 中直接定义 JSON 却不行。

转载于:https://my.oschina.net/patch/blog/1798719

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值