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. docker 传入变量

    1.Dockerfile中定义变量 ENV maxmemory="" 2.脚本接收变量 if [ "$maxmemory" ];then sed -i &quo ...

  2. 学习JAVAWEB第十五天

    今天跟着视频做一个简单的登录界面用到javabean,servlet,数据库等知识,还没做完,明天接着做.

  3. webStorm关于ESlint6语法格式化解决方案

    方式1: 下载ESLint6 格式化插件(格式化蛋痛,有点卡,而且必须先保存) 方式2:更改快捷键 在设置中,将下面这个格式化选项设置快捷键即可 到设置中的下面这个选项找修改即可

  4. ApacheCN Python 译文集(二)20211110 更新

    Python 应用计算思维 零.序言 第一部分:计算思维导论 一.计算机科学基础 二.计算思维要素 三.理解算法和算法思维 四.理解逻辑推理 五.探究性问题分析 六.设计解决方案和解决流程 七.识别解 ...

  5. java下载网络大文件之内存不够的解决办法(包含分片上传分片下载)

    一.背景 2020年11月份的时候,我做过一个项目,涉及到网络文件,比如第三方接口提供一个文件的下载地址,使用java去下载,当时我全部加在到JVM内存里面,话说,单单是80M的下载单线程没问题,但是 ...

  6. JOISC 2017

    Day1 「JOISC 2017 Day 1」开荒者 首先观察部分分发现分档很多,于是考虑一步步思考上来. 首先有一点关键观察(一): 风吹的顺序是无所谓的,令分别往东.西.南.北吹了 \(r, l, ...

  7. CF388C Fox and Card Game

    基于观察可以发现,双方都一定能保证取到每一列靠近自己的 \(\lfloor \frac{k}{2} \rfloor\) 个元素. 那么一旦一个人想要取另一个人能必然能取的部分,另一个人必然可以不让其取 ...

  8. Linux开机显示模式切换

    修改vim /etc/inittab 默认为5-图形界面模式,改为3-多用户模式即可 # Default runlevel. The runlevels used are: # 0 - halt (D ...

  9. linux sftp

    转载请注明来源:https://www.cnblogs.com/hookjc/ sftp用法 1. 用sftp如何登录服务器 sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输, ...

  10. 广播接收者案例_sd卡状态监听

    (1)定义广播接收者 import android.content.BroadcastReceiver; import android.content.Context; import android. ...