Requests接口測試-對cookies的操作處理(一)


大家都對cookie都不陌生,我們本篇文章使用requests結合cookie進行實例演示。我們使用一個接口項目地址,因為接口項目涉及到隱私問題,所以這里接口的地址我暫時不會給大家開放,但是我會給大家演示一個整體cookie的處理流程,因為這部分在實際的接口測試中是十分重點的。大家只需要把處理cookie的流程和原理整明白了,其他的就都好說了。。。我們接下開始干:

首先呢,我們要知道整個cookie的一個實現:

其實cookie是一個客戶端的機制,關於cookie的實現其實是很復雜的。大家可以訪問這篇文章去學習和了解:深入理解cookie和session  ok,我們了解了什么是cookie以后在來看下面的操作。首先我們要知道cookie的一個整個請求處理流程:

  1.發送登陸請求

  2.登陸成功后

  3.獲取session信息並返回

  4.帶着登陸成功后的session登陸后的其他接口

在訪問登陸接口時,我們先開啟charles進行抓包,然后在定義一個login方法,來看代碼的實現方法:

 

抓取登陸請求后,我們使用requests進行編寫login接口:

import requests def login(): r = requests.post( 'http://xxxxxxx:20080/auth/login', data={"username":'system',"password":"123456"} ) return r.json() print (login())

我們查看登陸后,系統返回的結果:

C:\Python35\python.exe E:/project/index.py {'code': 200} Process finished with exit code 0

很明顯,返回了一個code=200的狀態碼,這個並不是我們需要的,我們需要的是登陸后,服務器返回的session,我們要獲取這個Session,方便我們訪問系統的其他接口,所以,這里面,我們需要使用一個特殊的方法來獲取登陸系統后,服務器返回的session,繼續往下看,我們將上面的代碼進行處理: r.cookies是獲取服務器返回的session方法

import requests def login(): r = requests.post( 'http://xxxxxxx:20080/auth/login', data={"username":'system',"password":"123456"} ) return r.cookies print (login())

返回結果:

<RequestsCookieJar[<Cookie port=20080 for 117.39.63.66/>, <Cookie session=.eJwdjsuKwkAQRX9Fau0ibesmMIuGSJNAdxGoGKo2wmh8lMkmjsRp8d8nzvZwz-W8YH8au_sF8p_x0S1hfz1C_oLFN-SAPqyDbldIO-U2bIQOv-hrw63ceKgT68EK8SYOpYnaGKHGiopyclZ8MyGFp2h_ZS2nD0dqMmznDUkvhQyh_Xhyi-qykESDryde7fqQI7gveS3jcu_G_Hwy8_wA-akbj.DlapFg.6CIk-zQ13C3TbJ-mjjNP_tpxySw for 117.39.63.66/>]>

OK,我們得到了服務端返回的cookies,類似這種的<Cookie session=.eJwdjsuKwkAQRX9Fau0ibesmMIuGSJNAdxGoGKo2wmh8lMkmjsRp8d8nzvZwz-W8YH 然后我們取到session,使用的方法是:r.cookies["session"],看代碼如下:

import requests def login(): r = requests.post( 'http://xxxxxxx:20080/auth/login', data={"username":'system',"password":"123456"} ) return r.cookies['session'] print (login())

返回結果如下:

.eJwdjsuKwkAQRX9Fau0ibesmMIuGSJNAdxGoGKo2wmh8lMkmjsRp8d8nzvZwz-W8YH8au_sF8p_x0S1hfz1C_oLFN-SAPqyDbldIO-U2bIQOv-hrw63ceKgT68EK8SYOpYnaGKHGiopyclZ8MyGFp2h_ZS2nD0dqMmznDUkvhQyh_Xhyi-qykESDryde7fqQ2GBx7KOyRV8N828KdE5M1QWpnptKK4XLkCplcs9I7gveS3jcu_G_Hwy8_wA-akbj.Dlaprw.y-qE1LxdvCMnz0W9B87H6Cv8W80

ok,整個cookie的獲取流程我們就到這里了。假設如果我們不帶上session,直接訪問系統的其它任意一個接口,我們來看一下是否可以呢?我們繼續定義一個方法,叫getInfo,代碼如下:

import requests def login(): r = requests.post( 'http://xxxxxxx:20080/auth/login', data={"username":'system',"password":"123456"} ) return r.cookies['session'] def getInfo(): r =requests.get('http://xxxxx:20080/settings/option/cloud/data') return r.text print(getInfo())

查看返回結果:

C:\Python35\python.exe E:/project/index.py <!DOCTYPE html>
<!--[if IE 8]>
<html lang="en" class="ie8 no-js"> <![endif]-->
<!--[if IE 9]>
<html lang="en" class="ie9 no-js"> <![endif]-->
<!--[if !IE]><!-->
<html lang="en">
<!--<![endif]-->
<!-- BEGIN HEAD -->

<head>
    <meta charset="utf-8" />
    <title> xxxxxxxxx系統 </title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta content="width=device-width, initial-scale=1" name="viewport" />
    <meta content="" name="description" />
    <meta content="" name="author" />
    <!-- BEGIN GLOBAL MANDATORY STYLES -->
    <link href="../static/global/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
    <link href="../static/global/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
    <link href="../static/global/plugins/uniform/css/uniform.default.css" rel="stylesheet" type="text/css" />
    <!-- BEGIN PAGE LEVEL STYLES -->
    <link href="../static/pages/css/login-1.min.css" rel="stylesheet" type="text/css" />
    <!-- END PAGE LEVEL STYLES -->
    <!-- BEGIN THEME LAYOUT STYLES -->
    <!-- END THEME LAYOUT STYLES -->
    <link rel="shortcut icon" href="/static/img/favicon.ico" /> </head>
<!-- END HEAD -->

<body class=" login">

    <div id="wrapper">
        <div class="login_box">
            <form class="login-form" action="/auth/login" method="post" onsubmit="return false;">
                 <div class="alert alert-danger display-hide" style="display: none">
                        <button class="close" data-close="alert"></button>
                        <span> 請輸入用戶名密碼. </span>
                 </div>
                <div class="login_right">
                    <div class="login_wrapper">
                        <div class="park_icon">
                            <div class="left">
                                <img src="/static/img/login_icon.png" alt="">
                            </div>
                            <div class="right">
                                <img src="/static/img/login_text.png" alt="">
                            </div>
                        </div>
                        <div class="title"> xxxxxxxxxx
系統 </div> <div class="input_box"> <div class="form-group"> <div class="input-icon"> <input class="form_login" type="text" placeholder="用戶名" name="username" /> </div> </div> <div class="form-group"> <div class="input-icon"> <input class="form_login" type="password" placeholder="密碼" name="password" /> </div> </div> </div> <button type="submit" class="btn white pull-right"> 登錄 </button> </div> </div> </form> </div> </div> <script src="../static/global/plugins/jquery.min.js" type="text/javascript"></script> <script src="../static/global/plugins/bootstrap/js/bootstrap.min.js" type="text/javascript"></script> <script src="../static/global/plugins/uniform/jquery.uniform.min.js" type="text/javascript"></script> <!-- END CORE PLUGINS --> <!-- BEGIN PAGE LEVEL PLUGINS --> <script src="../static/global/plugins/jquery-validation/js/jquery.validate.min.js" type="text/javascript"></script> <script src="../static/global/plugins/jquery-validation/js/additional-methods.min.js" type="text/javascript"></script> <!-- END PAGE LEVEL PLUGINS --> <!-- BEGIN THEME GLOBAL SCRIPTS --> <script src="../static/global/scripts/app.min.js" type="text/javascript"></script> <!-- END THEME GLOBAL SCRIPTS --> <!-- BEGIN PAGE LEVEL SCRIPTS --> <script type="text/javascript"> jQuery(document).ready(function() { $(".login-form").validate({ errorElement: "span", errorClass: "help-block", focusInvalid: !1, rules: { username: { required: !0 }, password: { required: !0 }, remember: { required: !1 } }, messages: { username: { required: "用戶名不能為空." }, password: { required: "密碼不能為空." } }, invalidHandler: function(e, r) { $(".alert-danger span").text("請輸入用戶名密碼."); $(".alert-danger", $(".login-form")).show() }, highlight: function(e) { $(e).closest(".form-group").addClass("has-error") }, success: function(e) { e.closest(".form-group").removeClass("has-error"), e.remove() }, errorPlacement: function(e, r) { e.insertAfter(r.closest(".input-icon")) }, submitHandler: function(e) { $('button').html('正在登錄...').css('opacity', '0.5').css('cursor', 'progress'); $('#username, #password').attr('disabled', 'disabled'); var postData = $(e).serialize(); $.post("/auth/login", postData, function(data) { if (data.code == 200) { window.location.href = "/"; } else { $(".alert-danger span").text(data.err_msg); $(".alert-danger", $(".login-form")).show(); $('button').html('登錄').css('opacity', '1').css('cursor', 'pointer'); $('#username, #password').removeAttr('diabled'); } }); return false; } }); $(".login-form input").keypress(function(e) { return 13 == e.which ? ($(".login-form").validate().form() && $(".login-form").submit(), !1) : void 0 }); }); </script> </body> </html> Process finished with exit code 0

答案顯而易見,我們沒有登錄成功,所以這個接口我們是無法訪問的.這時候我們就要帶上session來訪問我們剛剛的接口了,我們繼續來看 加上session后的整個代碼的處理:

import requests def login(): r = requests.post( 'http://117.39.xxxx/auth/login', data={"username":'system',"password":"123456"} ) return r.cookies['session'] def getInfo(): r =requests.get('http://117.39.xxxxx/settings/option/cloud/data', cookies={"session":login()}) #增加session return r.json() print(getInfo())

查看返回的結果:

{'code': 200, 'data': {'cloud_ip': {'value': 'sc.parkingwang.com'}, 'waiting_enable_flag': {'value': '0'}, 'parkno_type': {'value': 0}, 'terminal_operator': {'value': '192.168.199.1'}, 'total_full_limit_type': {'value': '1'}, 'tmp_full_limit_flag': {'value': '0'}, 'cloud_port': {'value': '9001'}, 'arm_no': {'value': '7100000005'}, 'connected': {'value': '1'}, 'pic_upload': {'value': '1'}, 'cloud_url': {'value': 'http://api.com/picupload/'}, 'auth_car_waiting_enable_flag': {'value': '0'}, 'fixed_full_limit_flag': {'value': '0'}}}

很明顯,我們登錄成功了,系統的接口也訪問成功了。


免責聲明!

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



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