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

原文发布于微信公众号 - Python自动化测试(wuya-python)

原文发表时间:2018-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Apache将www重定向到非www

当你有你的网站或应用程序启动和运行一个域的背后,则是经常需要还允许用户通过简单的域名访问到它,并在WWW子域名。也就是说,他们应该可以使用或不使用“ www. ...

15600
来自专栏程序员的SOD蜜

VS2008连接CodePlex的源代码管理服务

为了更有效的分享部门的.NET代码,我们决定把一些通用的组件源代码通过CodePlex来托管。CodePlex是MS提供的一个第三方源代码托管服务和开源项目管理...

26460
来自专栏王磊的博客

你必须知道的session与cookie

13530
来自专栏运维小白

12.10 Nginx访问日志

Nginx访问日志目录概要 日志格式 vim /usr/local/nginx/conf/nginx.conf //搜索log_format $remote...

22760
来自专栏Java帮帮-微信公众号-技术文章全总结

Spring-Session基于Redis管理Session【面试+工作】

session同样是使用redis来做集中式存储,为了方便测试使用本地的6379端口redis,LettuceConnectionFactory是redis连接...

20820
来自专栏北京马哥教育

关闭 Tomcat 的 TLD 扫描的功能 Jan 21st, 2014 | Comments

Tomcat 作为 Servlet 规范的实现者,它在应用启动的时候会扫描 Jar 包里面的 .tld 文件,加载里面定义的标签库,但是,我们在开发的时候很多都...

36490
来自专栏PHP在线

Http请求方法和响应状态码整理

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,格式如下: ? 可见请求行由请求方法字段、U...

430140
来自专栏企鹅号快讯

通过TCP Wrappers设置ssh源地址过滤策略无法生效的解决办法

Linux系统管理员们应该经常会收到安全管理员们发来的openssh的相关漏洞,这个很常见,危险级别也比较高。通常有两种解决办法:1、升级openssh版本;2...

29070
来自专栏王磊的博客

你必须知道的session与cookie

Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的...

36790
来自专栏运维小白

12.9 Nginx域名重定向

Nginx域名重定向目录概要 更改test.com.conf server { listen 80; server_name test.com ...

1K60

扫码关注云+社区

领取腾讯云代金券