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

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

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

401UNAUTHORIZED

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/

200OK

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-*-

importrequests

r=requests.get(‘http://localhost:5000/hotel/username/‘,

auth=(‘wuya‘,‘admin‘))print r.text

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

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

importrequestsfrom requests.auth importHTTPBasicAuth

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:GET

Status Code:403 FORBIDDEN

Remote Address:127.0.0.1:5000

见Response Headers部分的内容:

Content-Length:37

Content-Type:application/json

Date:Sun, 01 Apr 2018 14:04:36 GMT

Server:Werkzeug/0.11.13 Python/2.7.12

WWW-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-*-

importrequests

r=requests.get(

url=‘http://localhost:5000/hotel/username/‘,

auth=(‘wuya‘,‘admin‘))printr.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"}

]

}

python调用接口返回401_python接口测试之401错误的分析和解决(十六)相关推荐

  1. python调用接口返回401_Python接口测试之401错误的分析和解决方法(一)

    接口的测试中,经常会遇到客户端向服务端发送一个请求,服务端返回401的错误,那么今天本文章就来说明在接口测试中如何分析以及解决该问题. 我们知道在HTTP返回的状态码中,401错误表示的是被请求的页面 ...

  2. python实现简单的api接口-简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

  3. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  4. 使用Python调用有道翻译接口实现翻译任务

    使用Python调用有道翻译接口实现翻译任务 首先直接上代码,可以直接复制调用 import hashlib import random import timeimport requestsclass ...

  5. 用 python 调用百度翻译 v2transapi 接口

    一.获得接口 url 打开百度翻译:百度翻译 右键检查 或者 F12 打开控制台.点击网络这一项: 输入文字:哈哈,点击图中的过滤按钮,选择全部 可以看到,v2transapi?from=zh& ...

  6. 使用Python调用baidu翻译的接口,实现转换android stuido 中的values/strings.xml 解放生产力,自动翻译生成文件

    调用baidu翻译的接口,实现转换android stuido 中的values/strings.xml 解放生产力,自动翻译生成文件 因为使用的是合法免费的接口,每秒只能请求一次,测试结果翻译330 ...

  7. 某一个接口403 其他接口可以调通_Neo的务实外设指南 篇三十六:一个就够,65W快充+C口混插+最多6个设备 - 飞利浦65W摩天轮插座_插座...

    2020-10-26 15:29:0623点赞23收藏2评论 嗨,大家好!我是沈少! 之前晒雷电3扩展坞的时候,已经有小伙伴注意到我用来提供PD充电的是一个很小巧的魔方插座.也有朋友私下提醒我,这类产 ...

  8. Http 401错误重现实验及解决办法

    根据http协议对状态码的定义,401代表未经授权的访问.在IIS中在401的基础上定义了一系列的子状态码来代表各种不同情况下未经授权访问的具体原因. 401.1 - Logon failed. -登 ...

  9. 401错误信息页html,Http 401错误重现实验及解决办法

    根据http协议对状态码的定义,401表明未经受权的访问.在IIS中在401的基础上定义了一系列的子状态码来表明各类不一样状况下未经受权访问的具体缘由. html 401.1 - Logon fail ...

最新文章

  1. 让VirtualBox的虚拟机器在电脑开机时自动启动
  2. 基于OpenCV提取特定区域
  3. 【客户案例】智能驾驶行业如何上云?
  4. html如何让框架的边框消失,css如何让边框透明?
  5. 计算机应用与基础实践怎么考,自考计算机基础应用科目笔试和实践性考试怎么考...
  6. HipHop PHP HHVM资料收集
  7. 自定义生成器函数模拟Python内置函数filter()
  8. MySQL正则表达式的问题
  9. React躬行记(8)——样式
  10. 网络+系统+ITSM工具Network+system+ITSM tool
  11. 手机文件夹为什么是英文?哪些可以删除?看完清理能多出10G内存
  12. 一元云购短信-配置修改
  13. 【CSGO】Akuma正式解散 !各奔东西 被NAVI撞碎了?
  14. 城科软件协会官网正式上线
  15. 《奇葩说》撞题郭敬明,面对“死亡”,AI竟然赚足眼泪和流量?
  16. Unity UGUI图文混排(七) -- 下划线
  17. MATLAB中resample函数使用
  18. 使用 UML进行系统建模实验报告[图书管理系统]
  19. mac下配置Flutter环境变量
  20. 黄金斗士原生android,联想黄金斗士S8对比红米Note视频评测

热门文章

  1. 独角兽有泡沫?Absolutely!但绝非估值泡沫
  2. teamviewer激活过程中遇到的问题汇总
  3. 车载处理器系统的架构区分
  4. ASP.NET 2.0 中实现跨页提交 (碧血黄沙)
  5. css实现响应式布局
  6. Adams 导入总是模型报错无法导入
  7. python字典操作总结
  8. 修正《 里约大冒险》字幕的程序
  9. 做自媒体月入3W+推荐这3个平台,看看哪个适合你
  10. linux smartgit客户端,跨平台Git客户端SmartGit 18.1.5发布下载