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维持会话的更多相关文章

  1. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

  2. Python——Requests库的开发者接口

    本文介绍 Python Requests 库的开发者接口,主要内容包括: 目录 一.主要接口 1. requests.request() 2. requests.head().get().post() ...

  3. Python requests介绍之接口介绍

    Python requests介绍 引用官网介绍 Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用. Requests 允许你发送纯天然,植物饲养的 HTTP/1. ...

  4. python requests 接口测试

    1.get方法请求接口 url:显而易见,就是接口的地址url啦 headers:请求头,例如:content-type = application/x-www-form-urlencoded par ...

  5. Python requests模拟登录

    Python requests模拟登录 #!/usr/bin/env python # encoding: UTF-8 import json import requests # 跟urllib,ur ...

  6. 大概看了一天python request源码。写下python requests库发送 get,post请求大概过程。

    python requests库发送请求时,比如get请求,大概过程. 一.发起get请求过程:调用requests.get(url,**kwargs)-->request('get', url ...

  7. Python requests 安装与开发

    Requests 是用Python语言编写HTTP客户端库,跟urllib.urllib2类似,基于 urllib,但比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求, ...

  8. python requests库学习笔记(上)

    尊重博客园原创精神,请勿转载! requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.pytho ...

  9. python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言)

    python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言) 感觉要总结总结了,希望这次能写个系列文章分享分享心得,和大神们交流交流,提升提升. 因为 ...

随机推荐

  1. LibreOJ #6000. 「网络流 24 题」搭配飞行员

    二次联通门 : LibreOJ #6000. 「网络流 24 题」搭配飞行员 /* LibreOJ #6000. 「网络流 24 题」搭配飞行员 二分图最大匹配 Dinic最大流 + 当前弧优化 */ ...

  2. 第十七节:Runnable创建线程,Thread创建线程,唤醒线程和计数器多线程,线程同步与等待

    Runnable创建线程 public class RunnableDemo implements Runnable{ @Override public void run(){ int i = 1; ...

  3. linux下文件传输一些方法整理.

    ftp类 ftp 命令已经不推荐使用了. #基本用法 lftp sftp://[domain name] lftp sftp://theURL.org #使用不同用户名 lftp sftp://[us ...

  4. 通过蓝牙共享网络设置Charles抓包

    在办公室连接WiFi时,电脑和移动设备分配到的IP地址不在同一网段, 但是Android系统提供了一个非常方便的功能,可以搭建一个网络使得这两台设备处于同一网段,实现无障碍访问,使用Charles抓包 ...

  5. Change Assembly Version in a compiled .NET assembly

    Change Assembly Version in a compiled .NET assembly You can use ILMerge: ILMerge.exe Foo.dll /ver:1. ...

  6. Winform中利用委托实现窗体之间的传值

    点击打开按扭,打开传输值窗体 public partial class Form1 : Form { public Form1() { InitializeComponent(); } public ...

  7. Qt编写自定义控件28-颜色滑块面板

    一.前言 相比于上一个颜色按钮面板,此控件就要难很多,颜色值有三种表示形式,除了程序员最常用的RGB以外,还有HSB和CMY方式. RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝 ...

  8. Qt编写自定义控件22-蚂蚁线

    一.前言 关于蚂蚁线控件,相信很多用过PS的人都知道,在选中某个区域以后,边上的线条会有一种动态流动的效果,这种效果就叫做蚂蚁线,百科的解释是:动物的一种本能现象,领头的蚂蚁以随机的路线走向食物或洞穴 ...

  9. 通过举例了解java中的流

    Java流结构介绍: Java所有的流类位于java.io包中,都分别继承字以下四种抽象流类型.   字节流 字符流 输入流 InputStream Reader 输出流 OutputStream W ...

  10. js取url问号后的参数方法封装

    工具方法: function getRequest() { var url = location.search; // 获取url中?后面的字符串 var theRequest = new Objec ...