Python post中session和auth 的三种方法
1、方式一,获取session后。存储起来。下次调用时候,传递一个session植即可
#/bin/python
# -*- coding: utf-8 -*-
import requests
from urllib import parse class HarborAapi(object):
def __init__(self,url,username,passwd):
'''
@Author: xiajinqi
:param url:
:param username:
:param passwd:
'''
print("构造函数")
self.url = url
self.username= username
self.passwd=passwd
self.session_id_key = "sid" def login_get_session(self):
print("获取session")
header={
'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded'
}
req_url='%s/c/login'%(self.url)
req_dict={
'principal': self.username,
'password': self.passwd
}
req_data=parse.urlencode(req_dict)
try :
res = requests.post(req_url, headers=header, data=req_data)
print(res.text)
if res.status_code==200 : ### 200位数字不可加"
self.session_id = res.cookies.get("sid")
return self.session_id
except :
raise Exception("login error,please check your account info!" ) def get_projects(self):
print("获取工程")
header = {
'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
'Content-Type': 'application/json'
}
req_url = '%s/api/projects?page=1&page_size=15' % (self.url)
req_dict={
'page': '1',
'page_size': '15'
} r = requests.get(req_url, cookies={'sid':self.login_get_session()})
print(r.text)
print(r.status_code) ### cookies={self.session_id_key: self.session_id}
def logout(self):
r=requests.get('%s/c/logout' % (self.url),cookies={'sid': self.session_id})
print(r.text) harbor=HarborAapi('http://xx.xxxxx.com','test','00000')
print(harbor.login_get_session())
harbor.get_projects()
方式二通过session 方式发送请求
#/bin/python
# -*- coding: utf-8 -*-
import requests
from urllib import parse class HarborAapi(object):
def __init__(self,url,username,passwd):
'''
@Author: xiajinqi
:param url:
:param username:
:param passwd:
'''
print("构造函数")
self.url = url
self.username= username
self.passwd=passwd
self.session_id_key = "sid" def login_get_session(self):
print("获取session") header={
'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded'
}
req_url='%s/c/login'%(self.url)
req_dict={
'principal': self.username,
'password': self.passwd
}
req_data=parse.urlencode(req_dict)
try :
s = requests.Session() ###通过session方式请求。会自动保留cookie信息
res = s.post(req_url, headers=header, data=req_data)
print(res.text)
if res.status_code==200 : ### 200位数字不可加"
self.session=s
# self.session_id = res.cookies.get("sid")
print(s)
return s #####s中存在cookie植
except :
raise Exception("login error,please check your account info!" ) def get_projects(self):
print("获取工程")
header = {
'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
'Content-Type': 'application/json'
}
req_url = '%s/api/projects?page=1&page_size=15' % (self.url)
req_dict={
'page': '1',
'page_size': '15'
} r = self.session.get(req_url)
print(r.text)
print(r.status_code) ### cookies={self.session_id_key: self.session_id}
def logout(self):
r=requests.get('%s/c/logout' % (self.url),cookies={'sid': self.session_id})
print(r.text) harbor=HarborAapi('https:/******','test','1234')
harbor.login_get_session()
harbor.get_projects()
### 返回session对象
构造函数
获取session
<requests.sessions.Session object at 0x0000000003F0BE80>
方式三:通过auth 和session 相互结合的模式来实现,跨路径访问
#/bin/python
# -*- coding: utf-8 -*-
import requests
from urllib import parse
from requests.auth import HTTPBasicAuth class HarborAapi(object):
def __init__(self,url,auth):
'''
@Author: xiajinqi
:param url:
'''
print("构造函数")
self.url = url
self.auth=auth
self.session_id_key = "sid" def setting(self):
###定义会话保持s并且设置s的auth 属性
self.session=requests.session()
self.session.auth=self.auth def get_projects(self):
print("获取工程")
header = {
'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
'Content-Type': 'application/json'
}
#https://harbor.yylending.com:8443/api/projects?page=1&page_size=15
req_url = '%s/api/projects?page=1&page_size=15' % (self.url)
req_dict={
'page': '1',
'page_size': '15'
}
req_data=parse.urlencode(req_dict)
r = self.session.get(req_url,data=req_dict,headers=header)
print(r.text)
print(r.status_code) auth = HTTPBasicAuth('att','12345') harbor=HarborAapi('https://xxx.xxxx.com:44',auth)
harbor.setting() ###
harbor.get_projects()
Python post中session和auth 的三种方法的更多相关文章
- PHP 中Session 反序列化机制的三种方法
�php.ini中存在三项配置项: session.save_path="" --设置session的存储路径 session.save_handler=""- ...
- Java中获取键盘输入值的三种方法
Java中获取键盘输入值的三种方法 Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...
- 【转载】取得系统中网卡MAC地址的三种方法
From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...
- (六)C#中判断空字符串的三种方法性能分析
三种方法分别是: string a=""; 1.if(a=="") 2.if(a==string.Empty) 3.if(a.Length==0) 三种方法是等 ...
- Java中实现线程同步的三种方法
实现同步的三种方法 多线程共享数据时,会发生线程不安全的情况,多线程共享数据必须同步. 实现同步的三种方法: 使用同步代码块 使用同步方法 使用互斥锁ReetrantLock(更灵活的代码控制) 代码 ...
- Linux中创建Daemon进程的三种方法
什么是daemon进程? Unix/Linux中的daemon进程类似于Windows中的后台服务进程,一直在后台运行运行,例如http服务进程nginx,ssh服务进程sshd等.注意,其英文拼写为 ...
- Centos8(Liunx) 中安装PHP7.4 的三种方法和删除它的三种方法
编译安装 Centos8下PHP源码编译和通过yum安装的区别和以后的选择 其实这两种方法各有千秋: yum安装: 从yum安装来说吧,yum相当于是自动化帮你安装,你不用管软件的依赖关系,在yum安 ...
- cocos2dx中创建标签CCLabel的三种方法及特点
创建标签的三种方式:1.CCLabelTTF (True Type Font,又叫本地字体)这是最简单,也是最常用的方式,不依赖于资源文件,也不依赖于某个系统,所指定的字体如果系统没有,则会提 ...
- Java入门:Java中获取键盘输入值的三种方法
Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代 ...
随机推荐
- C++数据结构类型以及实现类
1.array数组 #include<iostream> #include<array> using namespace std; int main() { array< ...
- Mongodb全备+增备+oplog恢复误删数据
此时测试表中有7条数据,做个全备. 全备: mongodump --host=192.168.43.43 --port=37017 --oplog --out=/opt/mongo/fullbacku ...
- zabbix-mongodb监控脚本(高性能、低占用)
Zabbix调用脚本以实现对MongoDB的监控! 本脚本支持对服务存活状态.副本集.性能指标共计25个监控项! 使用mongostat和"echo rs.status()["me ...
- python 小兵(5)参数
我们目前为止,已经可以完成一些软件的基本功能了,那么我们来完成这样一个功能:约x 1 2 3 4 5 pint("拿出手机") print("打开陌陌") pr ...
- H264 编解码协议
1.概述 H264是MPEG-4标准所定义的最新编码格式,同时也是技术含量最高.代表最新技术水平的视频编码格式之一,标准写法应该是H.264.H.264视频格式是经过有损压缩的,但是在技术上尽可能做到 ...
- Node.js下载安装与配置(windows)
一.Node.js下载 官网下载地址:下载 | Node.js 中文网 (nodejs.cn) 以Windows64位安装版为例,点击"Windows 安装包(.msi)"右侧的& ...
- 社交网络分析的 R 基础:(三)向量、矩阵与列表
在第二章介绍了 R 语言中的基本数据类型,本章会将其组装起来,构成特殊的数据结构,即向量.矩阵与列表.这些数据结构在社交网络分析中极其重要,本质上对图的分析,就是对邻接矩阵的分析,而矩阵又是由若干个向 ...
- String存放位置
简介 字符串在不同的JDK版本中,存放的位置不同,创建方式不同,存放的位置也不同. 存放位置 JDK1.7以下,无论何种方法创建String对象,位置都位于方法区. JDK1.8及1.8以上,new ...
- simpholders 官方网址 https://www.simpholders.com/
SimPholders可让你快速直接地访问iPhone模拟器应用的app文档.你可以通过SimPholders找到数据库文件.永久存储以及缓存,它是一个非常实用的app debug工具,同时还可以离线 ...
- 跨域 CORS 详解 (转)
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从 ...