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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM