接口自动化【二】(图形验证码处理)

文章目录

  • 前言
  • 一、图形验证码图片获取(需要实际截图做对比补充)
  • 二、调第三方接口获取验证码
  • 三、后端登录接口(举例)
  • 总结

前言

讲解了图片验证的处理;在接口测试中遇见的一些问题;多部分编码的注意点


一、图形验证码图片获取(需要实际截图做对比补充)

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 # 提取值,来比对。


总结

暂无

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值