亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python接口自動(dòng)化之request請(qǐng)求封裝源碼分析

 更新時(shí)間:2022年06月16日 15:00:39   作者:??行者AI????  
這篇文章主要介紹了Python接口自動(dòng)化之request請(qǐng)求封裝源碼分析,文章圍繞主題的相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下

前言:

我們?cè)谧鲎詣?dòng)化測(cè)試的時(shí)候,大家都是希望自己寫(xiě)的代碼越簡(jiǎn)潔越好,代碼重復(fù)量越少越好。那么,我們可以考慮將request的請(qǐng)求類(lèi)型(如:Get、Post、Delect請(qǐng)求)都封裝起來(lái)。這樣,我們?cè)诰帉?xiě)用例的時(shí)候就可以直接進(jìn)行請(qǐng)求了。

1. 源碼分析

我們先來(lái)看一下Get、Post、Delect等請(qǐng)求的源碼,看一下它們都有什么特點(diǎn)。

(1)Get請(qǐng)求源碼

	def get(self, url, **kwargs):
		r"""Sends a GET request. Returns :class:`Response` object.
		:param url: URL for the new :class:`Request` object.
	    :param \*\*kwargs: Optional arguments that ``request`` takes.
	    :rtype: requests.Response
	     """
		
		kwargs.setdefault('allow_redirects', True)
		return self.request('GET', url, **kwargs) 

(2)Post請(qǐng)求源碼

	def post(self, url, data=None, json=None, **kwargs):
		r"""Sends a POST request. Returns :class:`Response` object.
		:param url: URL for the new :class:`Request` object.
	    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
		object to send in the body of the :class:`Request`.
		:param json: (optional) json to send in the body of the :class:`Request`.
		:param \*\*kwargs: Optional arguments that ``request`` takes.
		:rtype: requests.Response
		"""
		return self.request('POST', url, data=data, json=json, **kwargs)  

(3)Delect請(qǐng)求源碼

    def delete(self, url, **kwargs):
        r"""Sends a DELETE request. Returns :class:`Response` object.
        :param url: URL for the new :class:`Request` object.
        :param \*\*kwargs: Optional arguments that ``request`` takes.
        :rtype: requests.Response
        """
        return self.request('DELETE', url, **kwargs)

(4)分析結(jié)果

我們發(fā)現(xiàn),不管是Get請(qǐng)求、還是Post請(qǐng)求或者是Delect請(qǐng)求,它們到最后返回的都是request函數(shù)。那么,我們?cè)偃タ匆豢磖equest函數(shù)的源碼。

	def request(self, method, url,
	        params=None, data=None, headers=None, cookies=None, files=None,
	        auth=None, timeout=None, allow_redirects=True, proxies=None,
	        hooks=None, stream=None, verify=None, cert=None, json=None):
	    """Constructs a :class:`Request <Request>`, prepares it and sends it.
	    Returns :class:`Response <Response>` object.
	
	    :param method: method for the new :class:`Request` object.
	    :param url: URL for the new :class:`Request` object.
	    :param params: (optional) Dictionary or bytes to be sent in the query
	        string for the :class:`Request`.
	    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
	        object to send in the body of the :class:`Request`.
	    :param json: (optional) json to send in the body of the
	        :class:`Request`.
	    :param headers: (optional) Dictionary of HTTP Headers to send with the
	        :class:`Request`.
	    :param cookies: (optional) Dict or CookieJar object to send with the
	        :class:`Request`.
	    :param files: (optional) Dictionary of ``'filename': file-like-objects``
	        for multipart encoding upload.
	    :param auth: (optional) Auth tuple or callable to enable
	        Basic/Digest/Custom HTTP Auth.
	    :param timeout: (optional) How long to wait for the server to send
	        data before giving up, as a float, or a :ref:`(connect timeout,
	        read timeout) <timeouts>` tuple.
	    :type timeout: float or tuple
	    :param allow_redirects: (optional) Set to True by default.
	    :type allow_redirects: bool
	    :param proxies: (optional) Dictionary mapping protocol or protocol and
	        hostname to the URL of the proxy.
	    :param stream: (optional) whether to immediately download the response
	        content. Defaults to ``False``.
	    :param verify: (optional) Either a boolean, in which case it controls whether we verify
	        the server's TLS certificate, or a string, in which case it must be a path
	        to a CA bundle to use. Defaults to ``True``.
	    :param cert: (optional) if String, path to ssl client cert file (.pem).
	        If Tuple, ('cert', 'key') pair.
	    :rtype: requests.Response
	    """
	    # Create the Request.
	    req = Request(
	        method=method.upper(),
	        url=url,
	        headers=headers,
	        files=files,
	        data=data or {},
	        json=json,
	        params=params or {},
	        auth=auth,
	        cookies=cookies,
	        hooks=hooks,
	    )
	    prep = self.prepare_request(req)
	    proxies = proxies or {}
	    settings = self.merge_environment_settings(
	        prep.url, proxies, stream, verify, cert
	    )
	    # Send the request.
	    send_kwargs = {
	        'timeout': timeout,
	        'allow_redirects': allow_redirects,
	    }
	    send_kwargs.update(settings)
	    resp = self.send(prep, **send_kwargs)
	    return resp    

從request源碼可以看出,它先創(chuàng)建一個(gè)Request,然后將傳過(guò)來(lái)的所有參數(shù)放在里面,再接著調(diào)用self.send(),并將Request傳過(guò)去。這里我們將不在分析后面的send等方法的源碼了,有興趣的同學(xué)可以自行了解。

分析完源碼之后發(fā)現(xiàn),我們可以不需要單獨(dú)在一個(gè)類(lèi)中去定義Get、Post等其他方法,然后在單獨(dú)調(diào)用request。其實(shí),我們直接調(diào)用request即可。

2. requests請(qǐng)求封裝

代碼示例:

	import requests
	class RequestMain:
	    def __init__(self):
	        """
	        session管理器
	        requests.session(): 維持會(huì)話(huà),跨請(qǐng)求的時(shí)候保存參數(shù)
	        """
	        # 實(shí)例化session
	        self.session = requests.session()
	    def request_main(self, method, url, params=None, data=None, json=None, headers=None, **kwargs):
	        """
	        :param method: 請(qǐng)求方式
	        :param url: 請(qǐng)求地址
	        :param params: 字典或bytes,作為參數(shù)增加到url中         
			:param data: data類(lèi)型傳參,字典、字節(jié)序列或文件對(duì)象,作為Request的內(nèi)容
	        :param json: json傳參,作為Request的內(nèi)容
	        :param headers: 請(qǐng)求頭,字典
	        :param kwargs: 若還有其他的參數(shù),使用可變參數(shù)字典形式進(jìn)行傳遞
	        :return:
	        """
	
	        # 對(duì)異常進(jìn)行捕獲
	        try:
	            """
	            
	            封裝request請(qǐng)求,將請(qǐng)求方法、請(qǐng)求地址,請(qǐng)求參數(shù)、請(qǐng)求頭等信息入?yún)ⅰ?
	            注 :verify: True/False,默認(rèn)為T(mén)rue,認(rèn)證SSL證書(shū)開(kāi)關(guān);cert: 本地SSL證書(shū)。如果不需要ssl認(rèn)證,可將這兩個(gè)入?yún)⑷サ?
	            """
	            re_data = self.session.request(method, url, params=params, data=data, json=json, headers=headers, cert=(client_crt, client_key), verify=False, **kwargs)
	        # 異常處理 報(bào)錯(cuò)顯示具體信息
	        except Exception as e:
	            # 打印異常
	            print("請(qǐng)求失?。簕0}".format(e))
	        # 返回響應(yīng)結(jié)果
	        return re_data
	if __name__ == '__main__':
	    # 請(qǐng)求地址
	    url = '請(qǐng)求地址'
	    # 請(qǐng)求參數(shù)
	    payload = {"請(qǐng)求參數(shù)"}
	    # 請(qǐng)求頭
	    header = {"headers"}
	    # 實(shí)例化 RequestMain()
	    re = RequestMain()
	    # 調(diào)用request_main,并將參數(shù)傳過(guò)去
	    request_data = re.request_main("請(qǐng)求方式", url, json=payload, headers=header)
	    # 打印響應(yīng)結(jié)果
	    print(request_data.text)  

 :如果你調(diào)的接口不需要SSL認(rèn)證,可將certverify兩個(gè)參數(shù)去掉。

3. 總結(jié)

本文簡(jiǎn)單的介紹了Python接口自動(dòng)化之request請(qǐng)求封裝

到此這篇關(guān)于Python接口自動(dòng)化之request請(qǐng)求封裝源碼分析的文章就介紹到這了,更多相關(guān)Python request 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python找出9個(gè)連續(xù)的空閑端口

    Python找出9個(gè)連續(xù)的空閑端口

    這篇文章主要介紹了Python找出9個(gè)連續(xù)的空閑端口的方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • python中賦值語(yǔ)句的特點(diǎn)和形式

    python中賦值語(yǔ)句的特點(diǎn)和形式

    這篇文章主要介紹了python中賦值語(yǔ)句的特點(diǎn)和形式,文中介紹了多目標(biāo)賦值的共享引用問(wèn)題,多目標(biāo)賦值其實(shí)是多個(gè)目標(biāo)對(duì)同一個(gè)內(nèi)存空間的引用,這里要分兩種情況,當(dāng)被引用對(duì)象是不可變對(duì)象時(shí)則不存在問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • 詳解使用python的logging模塊在stdout輸出的兩種方法

    詳解使用python的logging模塊在stdout輸出的兩種方法

    這篇文章主要介紹了詳解使用python的logging模塊在stdout輸出的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 基于python log取對(duì)數(shù)詳解

    基于python log取對(duì)數(shù)詳解

    今天小編就為大家分享一篇基于python log取對(duì)數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • PyTorch?Distributed?Data?Parallel使用詳解

    PyTorch?Distributed?Data?Parallel使用詳解

    這篇文章主要為大家介紹了PyTorch?Distributed?Data?Parallel使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • PyTorch的安裝與使用示例詳解

    PyTorch的安裝與使用示例詳解

    本文介紹了熱門(mén)AI框架PyTorch的conda安裝方案,與簡(jiǎn)單的自動(dòng)微分示例,并順帶講解了一下PyTorch開(kāi)源Github倉(cāng)庫(kù)中的兩個(gè)Issue內(nèi)容,需要的朋友可以參考下
    2024-05-05
  • Python中os模塊的使用及文件對(duì)象的讀寫(xiě)詳解

    Python中os模塊的使用及文件對(duì)象的讀寫(xiě)詳解

    這篇文章主要介紹了Python中os模塊的使用及文件對(duì)象的讀寫(xiě)詳解,Python?open()?方法用于打開(kāi)一個(gè)文件,并創(chuàng)建返回文件對(duì)象,在對(duì)文件進(jìn)行處理過(guò)程都需要使用到這個(gè)函數(shù),如果該文件無(wú)法被打開(kāi),會(huì)拋出?OSError,需要的朋友可以參考下
    2023-08-08
  • pandas數(shù)據(jù)處理之繪圖的實(shí)現(xiàn)

    pandas數(shù)據(jù)處理之繪圖的實(shí)現(xiàn)

    這篇文章主要介紹了pandas數(shù)據(jù)處理之繪圖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python3使用matplotlib繪制條形圖

    python3使用matplotlib繪制條形圖

    這篇文章主要為大家詳細(xì)介紹了python3使用matplotlib繪制條形圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 在python中做正態(tài)性檢驗(yàn)示例

    在python中做正態(tài)性檢驗(yàn)示例

    今天小編就為大家分享一篇在python中做正態(tài)性檢驗(yàn)示例,具有很的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12

最新評(píng)論