转自:https://blog.csdn.net/hubanbei2010/article/details/79878567

作为产品线的支撑角色QA/CI/CD等,http api解析是互联网公司中最常见的工作。

接口访问,返回的数据一般是json格式。

常见场景:对json格式数据的解析,取某个字段的值,做相应的判断。

任务:

假设刚部署出来的site的域名url为 https://qa-ultra-rds-96x.bbpd.io,现在检验version字段是否与预期相符。

与开发同学沟通,得知version信息可以通过访问api(/ultra/api/v1/buildinfo)获取到。

响应的数据为:

{
  "name": "ultra",
  "version": "3400.3.0",
  "branch": "develop",
  "commit": "a8ccaeb2b1c6094d598932219bb32cf9fe0380",
  "timestamp": "1523024279567",
  "date": "2018-04-06_14-17-59",
  "buildNumber": "3033",
  "buildName": "ultra/ultra-ui/develop",
  "buildType": "webpack",
  "buildVersion": "3400.3.0-ci.3033+a8ccaeb2",
  "ultraVersion": "2018-04-06_09-38-20",
  "learnVersion": "3400.3.0-ci.2927+b960272",
  "webServerVersion": "2.0.16",
  "config": {
    "mode": "production",
    "uiVersioningEnabled": true,
    "staticAssetsDomain": "d2aqwpvls1cndj.cloudfront.net",
    "learnVersionMapping": [
      {
        "from": "0.0.0.0",
        "uiVersion": "2018-04-06_09-38-20"
      }
    ]
  }
}

SHELL脚本实现:

curl -s --insecure https://qa-ultra-rds-96x.bbpd.io/ultra/api/v1/buildinfo|grep ' "ultraVersion"'|awk -F '"' '{print $4}'

PYTHON脚本实现:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import json
import requests

def get_ultra_ui_version(base_url):
version_url = base_url + '/ultra/api/v1/buildinfo'

try:
res = requests.get(version_url)
print('respons status is %d' % res.status_code)
ultraVersion = json.loads(res.text)['ultraVersion']
print(type(ultraVersion))
except Exception as ex:
print('call api is failed and error message is :%s' % str(ex))
print(ultraVersion)
return ultraVersion

if len(sys.argv) >=2:
base_url = sys.argv[1]
else:
print('parameters are missing')
sys.exit()

get_ultra_ui_version(base_url)

总结:

对比一下,
发现不需要登录状态下,且只需要获取简单信息,不需要后续处理,api的访问使用shell比python要简单的多。

如果涉及登录,可以借用python的requests库,可以实现较复杂的认证功能。且使用python库可以实现多请求的连续访问,多次请求之间有session的依赖关系。保持底层session不中断,可以减少建立tcp连接的次数,支持高并发。

HTTP 接口响应数据解析的更多相关文章

  1. 使用 yapi-to-typescript 生成接口响应数据的 TS 类型声明

    TS 是越写越爽,但是很不爽的是接口响应数据一堆,每次要去手写很麻烦. 最近正好后端接口文档从一个垃圾工具切换到了 Yapi,然后去搜了下可以通过接口文档自动生成 TS 类型声明,就自己搞了下,还是很 ...

  2. Spring Cloud Zuul记录接口响应数据

    系统在生产环境出现问题时,排查问题最好的方式就是查看日志了,日志的记录尽量详细,这样你才能快速定位问题. 如果需要在Zuul中进行详细的日志记录,这两种日志必不可少. API请求信息 API响应信息 ...

  3. 如何实现从登录接口响应数据中提取JSESSIONID

    通过调用接口,对服务器产生压力,单接口测试,会遇到响应数据返回的是要求先登录.这是我们在调用这个接口时,根据业务逻辑,必须先登录才可以,比如:提交订单,那么就需要先获取用户登录的JSESSIONID, ...

  4. MOOC(7)- case依赖、读取json配置文件进行多个接口请求-模拟接口响应数据(18)

    这里是把传入的请求数据作为响应值返回 # -*- coding: utf-8 -*- # @Time : 2020/2/15 9:47 # @File : do_mock_18.py # @Autho ...

  5. Jmeter—添加断言 判断接口响应数据是否符合预期

    发出请求之后,通过添加断言可以判断响应数据是否是我们的预期结果. 1 在Jmeter中发送一个状态返回200的http请求(参数故意输入错误).结果肯定是不是返回200啦. 但结果树中http请求的图 ...

  6. JMeter接口响应数据出现乱码的三种解决方法

    第一种方法: Content encoding设置为utf-8,若仍为乱码,请用方法2 图1 第二种方法: 修改bin文件夹下的jmeter.properties文件 搜索ISO,把“#sampler ...

  7. dynamic解析Http xml格式响应数据

    继续上一篇 构建RESTful风格的WCF服务 ,咱已经把服务端的数据和服务准备好了,客户端调用 wcf rest接口后如何解析xml?下面使用dynamic关键字解析来至于WCF REST XML响 ...

  8. json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例

    json-lib-2.4-jdk15.jar所需全部JAR包.rar  java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar  ...

  9. php接口开发时,数据解析失败问题,字符转义,编码问题

    php接口开发时,数据解析失败问题,字符转义,编码问题 情景: A平台--->向接口请求数据---->接口向B平台请求数据---->B平台返回数据给接口---->接口返回数据给 ...

随机推荐

  1. 一个可用来记录Isilon各个节点的CPU,网络,磁盘性能的命令

    通过查看命令isi statistics system的帮助信息,拼出了下面的命令. isi statistics system list --nodes=all --degraded --forma ...

  2. Android 资源混淆 AndResGuard MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. [Javascript] Check both prop exists and value is valid

    Sometime you need to check one prop exists on the object and value should not be ´null´ or ´undefine ...

  4. 【python】安装bencode

    C:\Users\horn1\Desktop\python\35-pytorrent>pip install bencodeCollecting bencode Downloading http ...

  5. oracle 学习blogs

    http://blog.sina.com.cn/s/blog_5dfbafd20100sxv7.html

  6. css样式小技巧

    1.css样式小技巧 HTML怎样设定使背景图片不随页面滚动而滚动 background-attachment:fixed; 2.实现li a 超过长度内容出现省略号… overflow:hidden ...

  7. LintCode: Triangle

    C++ 逆推 class Solution { public: /** * @param triangle: a list of lists of integers. * @return: An in ...

  8. Sqlite执行insert or ignore 或insert or replace语句。

    Sqlite执行insert or ignore 或insert or replace语句. ,); ,); 上面的第一条语句是每次执行时,如果不存在,则添加,如果存在,则更新. 上面的第二条语句是每 ...

  9. 如何设置Vmware下Linux系统全屏显示

    环境:Vmware10+RedHat5 在Vmware10中安装好RedHat5后,即使点击了全屏按钮(或使用快捷键Ctrl+Alt+Enter),全屏的效果依然不尽人意,跟下图中差不多,RedHat ...

  10. 使用MAVEN打JAR,直接使用

    一.简单的方法: 首先在pom.xml里面添加: <build> <plugins> <plugin> <artifactId>maven-assemb ...