扫描soa并输出所有服务方法

  现在,大多公司都采用soa架构。那么我们怎么知道soa提供哪些服务方法呢?是通过浏览器不断的点击尝试?还是通过wcf?还是通过阅读soa接口文档,在软件开发行业,总会有文档落后于代码的情况?这些手法都太拙劣了。其实我们可以通过一些更快捷高效的手段达到目的。

  萌生这个想法的背景是,我们公司部署了几个soa服务。然后我们测试自动化非常分散,形式各种各样,五花八门,简直就是八仙过海各显神通,非常不易于统计自动化覆盖率统计。于是乎,就想到了使用脚本扫描统计的办法。不多说了,直接上代码,脚本如下:

#coding=utf-8
import requests
from lxml import etree
from suds.client import Client
import csv

preSoa = r"http://192.168.1.20:8085/"

soaurl =requests.get(preSoa)

detail_html = etree.HTML(soaurl.content)

links =detail_html.xpath(ur"//a")
hrefs = [preSoa +x.attrib["href"] for x in links if ".config" not in x.text and "bin" not in x.text and "Demo" not in x.text and ".asax" not in x.text ]

svclinks =[]

def getsvcurl(templink):
    tempsoaurlcontent = requests.get(templink).content
    temphtml = etree.HTML(tempsoaurlcontent)
    temphtmllink =temphtml.xpath(ur"//a/text()")
    svclink = [templink + x + "?singleWsdl" for x in  temphtmllink  if ".svc" in x]
    [svclinks.append(x) for x in svclink]

[getsvcurl(x) for x in hrefs]

getsvcurl(preSoa)

print "svc count:{0}".format(len(svclinks))

client = Client(svclinks[0])

svcfuns =[]

def dealsvcmethods(svclink):
    methods=[x[0] for x in Client(svclink).sd[0].ports[0][1]]
    [svcfuns.append({"funcname":x,"svc":svclink}) for x in methods]

[dealsvcmethods(x) for x in svclinks]

with open(ur"E:\主站soa2016-10-25.csv", ‘ab+‘) as csvfile :
    writer = csv.DictWriter(csvfile,fieldnames = ["funcname","svc"])
    writer.writeheader()
    writer.writerows(svcfuns)

  当然,使用这种方式是有前提条件的。首先,soa站点必须要公开服务。有了这个,我们能够很容易找出前后版本新增的服务方法。

时间: 2024-08-08 10:04:12

扫描soa并输出所有服务方法的相关文章

Nmap扫描教程之网络基础服务DHCP服务类

Nmap扫描教程之网络基础服务DHCP服务类 Nmap网络基础服务 网络基础服务是网络正常工作的基石,常见的网络基础服务包括DHCP服务和DNS服务.其中,DHCP服务用来为计算机动态分配IP地址:DNS服务用来对主机名进行解析.本章将介绍网络基础服务的扫描方法. NmapDHCP服务类 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种局域网的网络协议.它的主要作用就是,给内部网络或网络服务供应商自动分配IP地址.当一台客户机需要一个IP

短信发送的流程,硬编码在了服务方法里面,优化方案

短信发送的流程,直接硬编码在服务方法里面,如何优化? 需要建立一个系统的短信发送表,定义短信发送模板: 通过批处理,比如spring batch+quartz,去扫描这个表,来统一进行短信发送处理: 而不是各自service,直接发送短信,这样既造成硬编码,而且又造成入口很多, 导致无法管理,无法追溯短信发送的记录,以及是否发送成功. 版权声明:本文为博主原创文章,未经博主允许不得转载.

快速扫描识别图中文字的方法

在日常的工作学习中,不可避免的会接触到图片文件,在面对图片文件的时候我们是不可能手动敲出图中文字的,因为这种做法比较的麻烦也很耽误时间,那有什么快速扫描识别图中文字的方法呢?下面小编就来为大家讲解一下. 参考工具:迅捷OCR文字识别软件 操作步骤: 1:因为使用到的是PC端的工具,所以整个步骤都是在电脑中进行的,先将所需识别的图片保存在电脑桌面,方便待会查找. 2:接着将OCR文字识别软件打开,在左边导航栏重新选择极速识别板块,进入到下面的操作. 3:选择好板块后就可以将图片添加进来了,点击添加

SOA 架构与微服务架构的区别

注重重用,微服务注重重写 SOA 的主要目的是为了企业各个系统更加容易地融合在一起. 微服务通常由重写一个模块开始.要把整个巨石型的应用重写是有很大的风险的,也不一定必要.我们向微服务迁移的时候通常从耦合度最低的模块或对扩展性要求最高的模块开始. 把它们一个一个剥离出来用敏捷地重写,可以尝试最新的技术和语言和框架,然后 单独布署.它通常不依赖其他服务.微服务中常用的 API Gateway 的模式主要目的也不是重用代码. 而是减少客户端和服务间的往来.API gateway 模式不等同与 Fac

SOA(Service-Oriented Architecture):面向服务的架构

SOA (Service-Oriented Architecture):面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互. 背景介绍 论系统架构设计的最大的问题,其实也就是职责的分配,分配的合理,实现起来就会很柔性,反之就会使架构很混乱 软件的生命周期大概可以

Android学习笔记——log无法输出的解决方法和命令行查看log日志

本人邮箱:[email protected],欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblogs.com/JohnTsai/p/3983936.html. 知识点 1.log无法输出的解决方法 2.通过命令行(command line)查看Android调试的log日志 log无法输出的解决方法 今天调试Android程序,发现Eclipse不输出log日志了.这让我很烦恼,程序调试的log都没法看到了.Google搜索了一些资料.发现stackoverflow上有很

【python】禁止print输出换行的方法

print后用一个逗号结尾就可以禁止输出换行,例子如下 >>> i=0 >>> while i < 3: print i i+=1 0 1 2 禁止输出换行后效果如下: >>> i=0 >>> while i < 3: print i, i+=1 0 1 2 [python]禁止print输出换行的方法,布布扣,bubuko.com

linux c程序中获取shell脚本输出的实现方法

linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作.比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令.但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果.例如,执行外部

crm组织服务方法

IOrganizationService Web 服务提供一组方法,用于对系统和自定义实体以及对组织的元数据执行最常见的操作. 也可以使用 IOrganizationService.Execute 方法和相应消息来执行这些操作 Create 使用 IOrganizationService.Create 方法可以创建支持 Create 消息的任何实体(包括自定义实体)的实例(记录). Retrieve 使用 IOrganizationService.Retrieve 方法可以检索实体的实例(记录)