文章目录
- 前言
- 一、图形验证码图片获取(需要实际截图做对比补充)
- 二、调第三方接口获取验证码
- 三、后端登录接口(举例)
- 总结
前言
讲解了图片验证的处理;在接口测试中遇见的一些问题;多部分编码的注意点
一、图形验证码图片获取(需要实际截图做对比补充)
F12,抓取图形验证码的获取接口。(先F12,再访问登录页面)
url : http://mall.lemonban.com:8108/captcha.jpg?uuid=bc193953-8242-4d16-8663-dc8a1ffa56f4
注意:open("code.png","wb")这个函数里面的code.png,并不是在文件里早已经建立好的图片,而是只是作为一个图片文件的名字(也可以理解为一个名叫code.png的空文件,需要我们写入数据,我个人认为这种理解方式更好一点。)fs.write(resp.content)这个函数,resp.content是获取的图片的内容(这里用content是以二进制的方式获取,一般图片都是以二进制方式获取)。fs.write()这个函数是把已经获取的二进制图片的内容,写入code.png的空文件。
在代码执行完成后,就会生成一个带有实际内容的code.png文件。
二、调第三方接口获取验证码
注意:第三方图片识别是需要收费的,所以就自己充点钱进去做测试了。
接口所需要的参数和URL:
url : http://api.ttshitu.com/predict
method:post
请求数据:
username:simple
password: yuan5311645
typeid: 3
image: 文件
依据接口文档里面的方式(2种):
第一种(直接使用data数据进行上传):
文件上传,要用requests的files参数
('filename', fileobj, 'content_type')
{"image":("code.png",resp.content,"image/png")}
我们对比一下request库里面的说明
成功的请求案例:
在这里我也发现了,用data传递json格式的数据的时候,才会指定Content-Type
在源码中不容易理解的地方:
这种写法很容易让初学者看不懂,我也是仔细分析了才明白。
最基础的对应就是:name:file-tuple
这一句话:`file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
也就是说:file-tuple也可以变成('filename', fileobj) 或者 变成 ('filename', fileobj, 'content_type')
就会写成:
name:file-tuple
name:('filename', fileobj)
name:('filename', fileobj, 'content_type')
注意:多部分编码
也就是每个部分有不同的内容类型:
有data,有file类型(图片或者其他)
参考一位博主的:
Python+requests库 POST接口图片上传 - 简书
第二种(直接使用json参数进行上传):
图片里面的数字和字母
注意:这里的第二种方式并不是我们随意想的第二种方式,而是接口文档里面提供的第二种方式。
注意:
(1)不进行解码时:
(2)使用encode的编码方式
三、后端登录接口(举例)
import requests
# 时间chuo的生成
import time
t = int(time.time()*1000)
print(t)
# 生成uuid
import uuid
sessionuuid = uuid.uuid4()
print(sessionuuid)
url = 'http://mall.lemonban.com:8108/adminLogin'
method = "post"
# 1、正场场景 -
req_body = {"principal":'student',
"credentials":"123456a",
"imageCode":"lemon"}
resp = requests.request(method,url,json=req_body)
print(resp.text)
try:
resp_dict = resp.json()
except:
print("纯粹的字符串")
result = resp.text # 比对字符串是否相等、包含一部分
else:
result = resp_dict # 提取值,来比对。
总结
暂无