python接口测试之401错误的分析和解决(十六)

作者 无涯

在接口的测试中,经常会遇到客户端向服务端发送一个请求,服务端返回401的错误,那么今天本文章就来说明在接口测试中如何分析以及解决该问题。

我们知道在HTTP返回的状态码中,401错误表示的是被请求的页面需要用户名和密码。401的错误详细的可以描述为:客户端发送请求抖到服务端,

页面需要验证服务端会返回401的错误,见如下的错误信息:

401 UNAUTHORIZED

Headers

Content-Type: application/jsonWWW-Authenticate: Basic realm="Authentication Required"Content-Length: 37Server: Werkzeug/0.11.13 Python/2.7.12Date: Wed, 14 Mar 2018 14:57:24 GMT
{  "error": "Unauthorized access"}

依据错误的信息可以获取到,发送的请求需要有通过HTTP的认证的认证信息,如果在浏览器中访问,会直接弹出需要输入用户名和密码的弹出框,见截图:

那么在HTTP的认证中,经常会被使用到认证方式分别是BASIC认证和DIGEST认证,我们具体来看BASIC的认证方式是一种流行,

行业标准的身份验证方式,是在HTTP1.0中指定。主要是指使用用户ID和密码使用Base64编码标准进行编码,并通过HTTP进行传属,

只有当用户ID和密码有效时,服务器才允许用户访问。

在我们的案例中,使用的认证方式是BASIC的认证方式,那么在客户端向服务端发送请求的时候,带上用户信息,再次请求可以成功。

在postman中的Basic auth指定用户名和密码,见请求成功的信息:

Response (20.345s) - http://localhost:5000/hotel/username/

200 OK

Headers

Content-Type: application/jsonContent-Length: 308Server: Werkzeug/0.11.13 Python/2.7.12Date: Wed, 14 Mar 2018 15:09:33 GMT
{  "datas":   [
    {             "check in": "2018-03-08 08:20:10",             "check out": "2018-03-09 14:00:00",             "identity card": "23012919950425723X",             "phone": "13484545190",              "room number": "1104",              "userid": 1,              "username": "李四",              "vpl": "京AJ3585"
    }
  ]
}

当然我们也可以使用requests轻松的解决这部分,见实现的代码:

#!/usr/bin/env python
#-*-coding:utf-8-*-

import  requests

r=requests.get(
   ‘http://localhost:5000/hotel/username/‘,
   auth=(‘wuya‘,‘admin‘))
print r.text

或者直接指定HTTPBasic,见修改后的代码:

#!/usr/bin/env python #-*-coding:utf-8-*- import requests from requests.auth import HTTPBasicAuth r=requests.get( ‘http://localhost:5000/hotel/username/‘, auth=HTTPBasicAuth(‘wuya‘,‘admin‘)) print r.text

通过一个案例来分析在HTTP的请求中403错误的解决以及HTTP的状态码中403怎么理解,见发送一个请求后,返回的状态码,见如下的信息:

在如上的的截图中,可以看到返回了HTTP状态码是403,那么如何这个过程了,在HTTP的状态码中,403 Forbidden表示对请求资源的访问被拒绝,而且服务端没有给出为什么拒绝的理由,比如我们在浏览器访问如上链接,见访问后服务端的回应:

{
  "error": "Unauthorized access"
}

见General的内容:

Request URL:http://localhost:5000/hotel/username/Request Method:GETStatus Code:403 FORBIDDENRemote Address:127.0.0.1:5000

见Response Headers部分的内容:

Content-Length:37Content-Type:application/jsonDate:Sun, 01 Apr 2018 14:04:36 GMTServer:Werkzeug/0.11.13 Python/2.7.12WWW-Authenticate:Basic realm="Authentication Required"

在如上的信息中,首部字段WWW-Authenticate用于HTTP访问认证,它会告诉客户端用于请求URI所指定资源的认证方案(Basic或者是Digest)。显示Basic,那么我们得到认证方案使用的是Basic Auth,在使用postman请求的时候需要鉴权,鉴权后再次访问,HTTP的状态码不再是403,而是200。见鉴权后的请求结果:

在请求中,headers中必须带上Authorization,要不就会再次出现403的错误。

下面实现使用python语言来处理403的错误,以及请求的时候带上鉴权,见实现的代码:

#!/usr/bin/env python
#-*-coding:utf-8-*-

import  requests

r=requests.get(
   url=‘http://localhost:5000/hotel/username/‘,
   auth=(‘wuya‘,‘admin‘))
print r.text
见执行如上代码后,打印的结果:

{
  "datas": [
    {
      "check in": "2018-03-08 08:20:10",
      "check out": "2018-03-09 14:00:00",
      "identity card": "23012919950425723X",
      "phone": "13484545190",
      "room number": "1104",
      "userid": 1,
      "username": "\u674e\u56db",
      "vpl": "\u4eacAJ3585"
    }
  ]
}

原文地址:https://www.cnblogs.com/jason89/p/9033940.html

时间: 2024-08-20 06:37:50

python接口测试之401错误的分析和解决(十六)的相关文章

python接口测试之token&session的处理(十四)

下面我们就来使用python语言来进行实现,在这里我们使用第三方的库requests,需要单独的安装下,安装的命令是: pip  install -U requests 见安装的截图: 安装成功后,如果可以在正常的导入,说明安装OK 安装好requests好后,我们就可以开始了,关于requests有不清楚的,可以看Python接口测试之requests(七),这里我们直接来进行实战, 我们再来进行回顾下我们需要做的事情,我们需要做的就是登录成功后,获取token,后面的接口都需要这个参数,所以

python爬虫优化和错误日志分析

发现问题 在爬虫下载过程中,执行一段时间后都会异常终止,下次必须kill掉进程重新运行 ,看能否优化并减少手动操作 错误日志分析 收集了nohup.out文件,发现主要错误是的数组下标越界,推测可能的问题为: 1)网络不稳定,http请求不通. 2)网络请求成功,但是html表单解析失败. 3)登录的cookie过期 优化思路 在所有有网络请求的地方,都加上了返回码是不是200的判断,然后html表单解析的地方加上数组长度判断,异常处理等 源码如下 import socket import ti

python接口测试之urllib2的应用(十五)

作者 无涯 在接口测试中或者说在网络爬虫中,urllib2库是必须要掌握的一个库,当然还有优秀的requests库,今天重点来说urllib2库在接口测试中的应用. urllib2定义了很多的函数和类,这些函数和类能够帮助我们在复杂情况下获取URLS的内容.这些情况包含了对headers的添加,cookie的处理,代理, 超时,鉴权等的处理.如果想详细的了解urllib2库,建议到官方查看,官方地址:https://docs.python.org/2/library/urllib2.html.查

Python接口测试之moco

在现在的软件开发过程中,特别是app的部分,需要的很多数据以及内容,都是来自server端的API,但是不能保证 在客户端开发的时候,api在server端已经开发完成,专门等着前端来调用,理想的情况是前端在开发的时候,已经有人写 好了接口,直接调用就可以了,但是这仅仅是理想的情况,很多时候,现实总是比理想多一层思考和磨难,如果在前端开发 的时候,提供api的同学没有提供,那么怎么办?等待还是自己先开发,等待肯定是愚蠢的做法,那么自己开发怎么来解决 api提供数据的这个问题,那么使用mock就可

Python接口测试之对MySQL/unittest框架/Requests 的操作

单元测试支持测试自动化. 共享的安装程序和关闭代码测试. 聚合成集合,测试和报告框架从测试的独立性.单元测试模块提供可以很容易地支持这些素质的一组测试的类.关于unittest 测试框架建议可以到官方查看详细的说明以及演示的实例.unittest各个模块的关系为: #!/usr/bin/env python #coding:utf-8 import unittest class TestDiv(unittest.TestCase): def setUp(self): pass def tearD

python接口测试之序列化与反序列化(四)

作者 无涯 在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象. 在python的标准库中,专门提供了json库与pickle库来处理这部分. 先来学习json的库,导入json库很简单,直接import json,下面通过具体的实例来说明json库对序列化与反序列化的使用.json库的主要方法为: #!/usr/bin/env python#coding:utf-8import  jsonp

python接口测试之json模块的使用

json.dumps() json.loads() json.dump json.load 一.json.dumps() 将python字典类型转换成json对象 import json # Python 字典类型转换为 JSON 对象 data = { 'no' : 1, 'name' : 'Runoob', 'url' : 'http://www.runoob.com' } json_str = json.dumps(data) print ("Python 原始数据:", rep

python接口测试之日志功能

之前在简书中看了一篇关于日志功能的文档,供大家参考:https://www.jianshu.com/p/62f7b49b41e7 Python通过logging模块提供日志功能,所以直接导入即可 import logging 1.定义日志收集器,指定收集器的名称,返回logging对象 case_logger = logging.getLogger('case') 2.指定日志收集器的日志等级,NOTEST(0) DEBUG(10) INFO(20) WARNING(30) ERROR(40)

python接口测试之requests库(一)

一.requests库的安装 requests库作为第三方库,需要安装 cmd模式下,运行pip install requests 二.在学习如何发送请求之前,我们先来了解一下requests库,查看一下他有什么方法 print dir(requests) 三.模拟发送get请求 1.发送不带参数的get请求 r = requests.get('https://api.github.com/events') 返回的是一个response对象,该对象中包含的内容,通过dir(r) 2.发送带参数的