Python 使用 requests 模塊發送處理 restful 類型的接口


  使用 requests (譯:瑞快四次)模塊進行封裝,幫你處理 restful (譯:儒哎斯否)類型的接口

一、requests 模塊基本使用

1、准備接口的URL、請求參數、請求頭

# 1. 構造注冊、登錄、充值請求的url
register_url = "注冊url" login_url = "登錄url" recharge_url = "充值url"

# 2. 創建請求參數
register_params = { "mobilephone": "18244446666", "pwd": "123456", "regname": "yuxing" } login_params = { "mobilephone": "18244446667", "pwd": "123456", } recharge_params = { "mobilephone": "18244446667", "amount": "500000", } # 可以添加請求頭,反爬蟲措施,所以有的需要自己添加合法的請求, 但是多數情況下, 不需要修改
headers = { "User-Agent": "Mozilla/5.0 shengruhuakai" }

 

2、向服務器發送請求

get 請求:使用 requests 庫中 get 方法

  • 如果給 params (派瑞斯)傳參, 那么是以查詢字符串參數的形式來傳的--在url后傳參
# get請求:使用 requests 庫中 get 方法 # 如果給 params (派瑞斯)傳參, 那么是以查詢字符串參數的形式來傳的--在url后傳參
res = requests.get(register_url, params=register_params) # 如果需要請求頭則加上 headers 請求頭參數
res1 = requests.get(register_url, params=register_params, headers=headers) # 返回的 res 是一個Response的對象, 就可以把它當作是一個響應報文

# 可以從返回的對象中獲取需要的數據----根據不同系統,獲取字段也不同 # 獲取響應狀態碼
print(res.status_code) # 獲取響應報文
print(res.text) # 將響應報文轉化為Python中的字典數據類型
print(res.json()) # 獲取cookie
print(res.cookies)

post 請求:使用 requests 庫中 post 方法

# post請求:使用 requests 庫中 post 方法 # 一般情況下 post 請求不會以 params 來傳參 # 如果給 params 傳參, 那么是以查詢字符串參數的形式來傳的--在url后傳參不安全
res3 = requests.post(register_url, params=register_params, headers=headers) # 返回的是一個 Response (瑞思幫死)的對象, 就可以把它當作是一個響應報文 # 從響應報文中獲取需要參數
print(res3.status_code)

 

3、給data、json傳參

  • 如果給 data 傳參, 那么會以 x-www-form-urlencoded 的形式來傳參

  • 如果給 json 傳參, 那么會以 json 格式的字符串形式來傳參

# 如果給 data 傳參, 那么會以 x-www-form-urlencoded 的形式來傳參
res4 = requests.post(register_url, data=register_params, headers=headers) # 返回的是一個Response的對象, 就可以把它當作是一個響應報文 # print(res4.status_code)

# 如果給 json 傳參, 那么會以 json 格式的字符串形式來傳參 # 這里的 params 既可以是字典, 也可以是 json 格式的字符串----但是不以字符串來傳,字典不易出錯 # 所有的參數, 都轉化為字典之后來傳遞
res5 = requests.post(register_url, json=register_params, headers=headers) # 返回的是一個 Response(響應)的對象, 就可以把它當作是一個響應報文
print(res5.status_code)

 

4、如果需要上個接口的 cookie

第一種方法:在登錄后取出 cookie 以參數的形式傳給 充值接口,不方便一般不使用

# 先登錄
login_res = requests.post(login_url, data=login_params, headers=headers) # cookie = login_res.cookies['JSESSIONID'] # 不能單獨取出字符串傳遞

print(login_res.status_code) cookie = login_res.cookies      # 只能傳遞cookies對象

# 充值 ---- cookies 以參數傳遞
recharge_res = requests.post(recharge_url, data=recharge_params, headers=headers, cookies=cookie) print(recharge_res.status_code)

 

第二種方法:使用 requests (瑞快斯特)中的 Session(賽神)創建會話,之后使用 Session 會話發送請求

# 創建 Session 會話對象, 相當於Jmeter當中的Cookie管理器
one_session = requests.Session() # 先登錄,使用會話發送請求
login_res = one_session.post(login_url, data=login_params, headers=headers) # 充值
recharge_res = one_session.post(recharge_url, data=recharge_params, headers=headers) # 關閉會話,close(科樓司) # 關閉之后, 依然可以發起請求 # 關閉會話只不過是釋放資源
one_session.close()

 

二、封裝 requests 模塊

import requests
import json
from scripts.handle_log import do_log


class HandleTheRequest:
    """
    封裝請求接口類
    """
    def __init__(self):
        """
        創建會話對象,定義一個session的參數
        """
        self.one_session = requests.Session()

    def to_request(self, url, method, data=None, headers=None, is_json=False):
        """
        定義一個請求方法
        :param url: 接口地址
        :param method: 請求方法get、post
        :param data: 參數
        :param headers: 請求頭
        :param is_json: 是否為json請求數據
        :return: 請求結果
        """
        if isinstance(data, str):
            try:
                data = json.loads(data)
            except Exception as e:
                data = eval(data)
                do_log.error("數據轉換器錯誤".format(e))

        if method.lower() == "get":     # 將輸入的請求方法轉化為大寫/lower
            res = self.one_session.get(url, params=data)
        elif method.lower() == "post":
            if is_json:     # 如果is_json為True,就以json格式的形式來傳參
                res = self.one_session.post(url, json=data, headers=headers)
            else:          # 如果is_json為False,就以www-form的形式傳參
                res = self.one_session.post(url, data=data, headers=headers)
        else:
            res = None
            print("不支持[{}]這種方法傳參".format(method))
            do_log.error("發送的請求不是get/post,不支持的請求方式".format(method))
        return res

    def close(self):
        """
        關閉session會話
        :return:
        """
        self.one_session.close()


# do_register = HandleTheRequest()

if __name__ == '__main__':
    # 1.構造前端的接口
    register_url = "請求地址"

    # 2.構造請求參數,為字典烈性Params
    register_params = {
        "mobilephone": "13211110003",
        "pwd": "123456",
        "regname": "shouhu"
    }

    # 添加請求頭
    headers = {
        "User-Agent": "Mozilla/5.0 shouhu"
    }

    a1_request = HandleTheRequest()

    register_request = a1_request.to_request(url=register_url, method="post", data=register_params, headers=headers)    # 傳請求頭
    # register_request = a1_request.to_request(url=register_url, method="post", data=register_params)
    print(f"cookies值為:{register_request.cookies}")

    # 關閉會話
    a1_request.close()

    # 如果以json格式傳參需要設置為 True
    # initiate_request.to_request(method="post", url=recharge_url, data=recharge_params, is_json=True)
    pass

 

全面的封裝:https://www.cnblogs.com/xiaogongjin/p/11372155.html

import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


class HandleRequests:

    def __init__(self):
        self.one_session = requests.Session()

    def request(self, url, method='get', headers=None, param=None, data=None, is_json=False, is_http=False):
        '''
        定義一個請求方法
        :param url: 域名接口
        :param method: 請求方法
        :param headers: 請求頭
        :param param: get請求體
        :param data: post表單請求體
        :param is_json: 是否為json請求數據
        :param is_http: 是否為http請求
        :return: 請求結果
        '''
        if is_http is False:
            if method.lower() == 'get':
                res = self.one_session.get(url=url, headers=headers, params=param, verify=False)
                return res
            elif method.lower() == 'post':
                if is_json:
                    res = self.one_session.post(url=url, headers=headers, data=data, verify=False)
                    return res
                else:
                    res = self.one_session.post(url=url, headers=headers, json=data, verify=False)
                    return res
            elif method.lower() == 'delete':
                res = self.one_session.delete(url=url, headers=headers, verify=False)
                return res
            else:
                print("不支持{}請求方法!".format(method))
        else:
            if method.lower() == 'get':
                res = self.one_session.get(url=url, headers=headers, params=data)
                return res
            elif method.lower() == 'post':
                if is_json:
                    res = self.one_session.post(url=url, headers=headers, data=data)
                    return res
                else:
                    res = self.one_session.post(url=url, headers=headers, json=data)
                    return res
            elif method.lower() == 'delete':
                res = self.one_session.delete(url=url, headers=headers)
                return res
            else:
                print("不支持{}請求方法!".format(method))

    def close_cookie(self):
        '''
        關閉cookie
        '''
        self.one_session.close()

 

 

 


免責聲明!

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



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