Python+requests维持会话
Python+requests维持会话
一、使用Python+requests发送请求,为什么要维持会话?
我们是通过http协议来访问web网页的,而http协议是无法维持会话之间的状态。比如说我们成功登录一个网站的后,去访问这个网站的其他页面的时候,登录状态会消失。所以导致页面刷新后就需要反复重新登录来维持会话。非常繁琐。所以我们需要通过cookies或者Session来维持会话。下面举个没有维持会话,请求响应失败的例子
代码:
import requests
import json
'''
在成功登录平台后,在成员编号页面新增成员的请求
'''
Search_url='http://47.106.203.20:8000/car-oss/webapi/easyflow/datatable/queryresult'
Search_par={
"pageSize":10,
"pageIndex":1,
"orgname":"M1对讲",
"pcNum":"",
"watchImei":"",
"name":"pc_watch_manage"
}
Search_header={
'Content-Type':'application/json'
}
Search_cookie={
'JSESSIONID':'3E2ED9359E53D31FBD13FE2ADE9D20D2'
}
r1 = requests.post(Search_url,data=json.dumps(Search_par),headers=Search_header)
print(r1.text)
运行结果:
{"errorCode":"","errorMsg":"会话过期,或者未登录"}
#因为没有维持会话,所以请求响应失败了
二、如何维持会话
维持会话有cookie和session 这2种方式,cookie和session都是将登录或者上一页面对应的会话信息存储起来,但是session不会保存服务器发给客户端的SessionID等信息。因为SessionID通常保存在cookie中。所以还是建议使用cookie维持会话
1、使用cookie
代码:
import requests
import json
Search_url='http://47.106.203.20:8000/car-oss/webapi/easyflow/datatable/queryresult'
Search_par={
"pageSize":10,
"pageIndex":1,
"orgname":"M1对讲",
"pcNum":"",
"watchImei":"",
"name":"pc_watch_manage"
}
Search_header={
'Content-Type':'application/json'
}
Search_cookie={
'JSESSIONID':'3E2ED9359E53D31FBD13FE2ADE9D20D2'
}
r1 = requests.post(Search_url,data=json.dumps(Search_par),headers=Search_header,cookies=Search_cookie)#在发送请求的时候带上了上一个对话的cookie
print(r1.text)
运行结果:
{"result":true,"msg":"success","data":{"pageIndx":1,"totalSize":1,"pageSize":10,"totalPage":1,"list":[{"id":"2c9220956c99b744016d00a758356582","pcNum":"","pcName":"测试","pcPhoneNum":"","orgname":"M1对讲","watchImei":""}]}}
2、使用Session
代码:
import requests
import json
from requests import session
'''
登入平台
'''
login_url='http://XX.XXX.XXX.XX:端口号/car-oss/user/login.htm'
login_par={
"username":"yitop",
"password":"f5235b0b3bdc7329466d9165bd563191"
}
login_header={
'Content-Type':'application/json'
}
s = requests.session()#储存界面的会话信息,维持会话
r1=s.post(login_url,data=json.dumps(login_par),headers=login_header)
'''
在新增成员信息页面执行查询操作
'''
Search_url='http://XX.XXX.XXX.XX:端口号/car-oss/webapi/easyflow/datatable/queryresult'
Search_par={
"pageSize":10,
"pageIndex":1,
"orgname":"M1对讲",
"pcNum":"",
"watchImei":"",
"name":"pc_watch_manage"
}
Search_header={
'Content-Type':'application/json'
}
r2 = s.post(Search_url,data=json.dumps(Search_par),headers=Search_header)
print(r1.text)
print('***************************')
print(r2.text)
也可以使用Python+requests来发送登录博客园平台,在页面查询信息的http请求来感受下cookie和session的具体用法
Python+requests维持会话的更多相关文章
- Python+Requests接口测试教程(1):Fiddler抓包工具
本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...
- Python——Requests库的开发者接口
本文介绍 Python Requests 库的开发者接口,主要内容包括: 目录 一.主要接口 1. requests.request() 2. requests.head().get().post() ...
- Python requests介绍之接口介绍
Python requests介绍 引用官网介绍 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. Requests 允许你发送纯天然,植物饲养的 HTTP/1. ...
- python requests 接口测试
1.get方法请求接口 url:显而易见,就是接口的地址url啦 headers:请求头,例如:content-type = application/x-www-form-urlencoded par ...
- Python requests模拟登录
Python requests模拟登录 #!/usr/bin/env python # encoding: UTF-8 import json import requests # 跟urllib,ur ...
- 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。
python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ...
- Python requests 安装与开发
Requests 是用Python语言编写HTTP客户端库,跟urllib.urllib2类似,基于 urllib,但比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求, ...
- python requests库学习笔记(上)
尊重博客园原创精神,请勿转载! requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.pytho ...
- python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言)
python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言) 感觉要总结总结了,希望这次能写个系列文章分享分享心得,和大神们交流交流,提升提升. 因为 ...
随机推荐
- 运算符重载之new与delete
关于new/delete,援引C++ Primer中的一段话: 某些应用程序对内存分配有特殊的要求,因此我们无法直接将标准的内存管理机制直接应用于这些程序.他们常常需要自定义内存分配的细节,比如使用关 ...
- idea快捷方式1
Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) 或者右键(Generate) fori/sout/psvm + Tab Ctrl+Alt ...
- 数据结构实验之二叉树五:层序遍历 (SDUT 3344)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; } ...
- 面向对象(OOP)笔记
1.本质:以类的方式组织代码,以对象的方式组织(封装)数据 2.对象:是具体的事物 3.类:是对对象的抽象(抽象 抽出象的部分) 先有具体的对象,然后抽象各个对象之间象的部分,归纳出类 通过类再认识其 ...
- postgresql could not connect to server
问题: postgresql部署在linux上,在自己电脑上使用pgadmin连接出现could not connect to server错误 问题分析: 出现上述原因有3种情况 1.linux上的 ...
- 图解Linux进程间通信实现原理(1)
为Linux应用程序的开发人员,对Linux的进程间通信方式肯定是了如指掌,平时的开发中应该会大量的使用到.当你迅速的在键盘上按下[CTRL+C]终止掉一个正在运行中的命令时,你有没有仔细的思考过背后 ...
- oracle行转列和列转行(pivot 和 unpivot 函数,wm_concat函数 )
create table demo(id int,name varchar(20),nums int); ---- 创建表insert into demo values(1, '苹果', 1000); ...
- Reids入门介绍
一.入门概述 1.是什么? Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式 ...
- CentOS 安装 docker-compose 加速
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$( ...
- Python语法 - 推导式
推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 列表推导式(list comprehension)最擅长的方式就是对整个列表分别做相同的操作,并且返回得到一个新的列 ...