python调⽤接⼝返回401_python接⼝测试之401错误的分析和
解决(⼗六)
在接⼝的测试中,经常会遇到客户端向服务端发送⼀个请求,服务端返回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指定⽤户名和密码,见请求成功的信息:
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": "230129************",
"phone": "134********",
"room number": "1104",
"userid": 1,
"username": "李四",
"vpl": "京AJ3585"
}python新手代码userid
]
}
当然我们也可以使⽤requests轻松的解决这部分,见实现的代码:
#!/usr/bin/env python#-*-coding:utf-8-*-
importrequests
auth=(‘wuya‘,‘admin‘))
或者直接指定HTTPBasic,见修改后的代码:
#!/usr/bin/env python#-*-coding:utf-8-*-
importrequestsfrom requests.auth importHTTPBasicAuth
auth=HTTPBasicAuth(‘wuya‘,‘admin‘))
通过⼀个案例来分析在HTTP的请求中403错误的解决以及HTTP的状态码中403怎么理解,见发送⼀个请求后,返回的状态码,见如下的信息:
在如上的的截图中,可以看到返回了HTTP状态码是403,那么如何这个过程了,在HTTP的状态码中,403 Forbidden表⽰对请求资源的访问被拒绝,⽽且服务端没有给出为什么拒绝的理由,⽐如我们在浏览器访问如上链接,见访问后服务端的回应:
{
"error": "Unauthorized access"
}
见General的内容:
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
(
auth=(‘wuya‘,‘admin‘))
见执⾏如上代码后,打印的结果:
{"datas": [
{"check in": "2018-03-08 08:20:10","check out": "2018-03-09 14:00:00","identity card": "230129************","phone": "134********","room number": "1104","userid": 1,"username": "\u674e\u56db","vpl": "\u4eacAJ3585"}
]
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论