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 的三种方法的更多相关文章

  1. PHP 中Session 反序列化机制的三种方法

    �php.ini中存在三项配置项: session.save_path="" --设置session的存储路径 session.save_handler=""- ...

  2. Java中获取键盘输入值的三种方法

    Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...

  3. 【转载】取得系统中网卡MAC地址的三种方法

    From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址 ...

  4. (六)C#中判断空字符串的三种方法性能分析

    三种方法分别是: string a=""; 1.if(a=="") 2.if(a==string.Empty) 3.if(a.Length==0) 三种方法是等 ...

  5. Java中实现线程同步的三种方法

    实现同步的三种方法 多线程共享数据时,会发生线程不安全的情况,多线程共享数据必须同步. 实现同步的三种方法: 使用同步代码块 使用同步方法 使用互斥锁ReetrantLock(更灵活的代码控制) 代码 ...

  6. Linux中创建Daemon进程的三种方法

    什么是daemon进程? Unix/Linux中的daemon进程类似于Windows中的后台服务进程,一直在后台运行运行,例如http服务进程nginx,ssh服务进程sshd等.注意,其英文拼写为 ...

  7. Centos8(Liunx) 中安装PHP7.4 的三种方法和删除它的三种方法

    编译安装 Centos8下PHP源码编译和通过yum安装的区别和以后的选择 其实这两种方法各有千秋: yum安装: 从yum安装来说吧,yum相当于是自动化帮你安装,你不用管软件的依赖关系,在yum安 ...

  8. cocos2dx中创建标签CCLabel的三种方法及特点

    创建标签的三种方式:1.CCLabelTTF     (True Type Font,又叫本地字体)这是最简单,也是最常用的方式,不依赖于资源文件,也不依赖于某个系统,所指定的字体如果系统没有,则会提 ...

  9. Java入门:Java中获取键盘输入值的三种方法

    Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代 ...

随机推荐

  1. 推荐召回--基于内容的召回:Content Based

    目录 1. 前言 2. 构建画像 3. 内容召回的算法 1. 前言 在之前总结过协同过滤的召回通路后,今天我们来总结下召回策略中的重头戏:基于内容的召回通路,也即我们常说的基于标签的召回.这里就要涉及 ...

  2. 安卓开发常见Bug-数据库未加载

    安卓的数据库是本地的,所以在项目启动后也就是在onCreat()进行时就要进行数据库加载操作 将数据库加载的操作放在onCreat()中,根据安卓运行生命周期,就实现了数据库的全局化,也就是始终存在于 ...

  3. django 验证和授权

    User模型 一. User模型简介 1. 是验证和授权框架的核心模型,完整路径为:django.contrib.auth.models.User 2. 模型中拥有的字段: 1. username:用 ...

  4. 如何在pyqt中自定义无边框窗口

    前言 之前写过很多关于无边框窗口并给窗口添加特效的博客,按照时间线罗列如下: 如何在pyqt中实现窗口磨砂效果 如何在pyqt中实现win10亚克力效果 如何在pyqt中通过调用SetWindowCo ...

  5. 手写简单call,apply,bind

    分析一下call的使用方法:call是显示绑定this指向,然后第一个参数是你所指向的this对象,后面跟着多个参数,以逗号隔开 function sum(num1,num2){ return num ...

  6. Swift可选类型

    可选类型 可选类型的介绍 注意: 可选类型时swift中较理解的一个知识点 暂时先了解,多利用Xcode的提示来使用 随着学习的深入,慢慢理解其中的原理和好处 概念: 在OC开发中,如果一个变量暂停不 ...

  7. 汉字编码(【Unicode】 【UTF-8】 【Unicode与UTF-8之间的转换】 【汉字 Unicode 编码范围】【中文标点Unicode码】【GBK编码】【批量获取汉字UNICODE码】)

    Unicode与UTF-8互转(C语言实现):http://blog.csdn.net/tge7618291/article/details/7599902 汉字 Unicode 编码范围:http: ...

  8. aidl介绍

    (1)远程服务 运行在其他应用里面的服务     (2)本地服务 运行在自己应用里面的服务    (3)进行进程间通信  IPC   (4)aidl Android interface Definat ...

  9. 利用babel将es6语法转es5的简单示例

    前言 Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行. 这意味着,你可以现在就用ES6编写程序,而不用担心现有环境是否支持. 文件目录结构 生成包管理配置文件pa ...

  10. Haproxy LVS Nginx的优缺点总结

    Haproxy  LVS  Nginx的优缺点总结 1.haproxy优点 2.Nginx优点 3.Nginx缺点 4.LVS优点 5.LVS缺点 haproxy优点: haproxy也是支持虚拟主机 ...