用于生成WebService使用的数字证书及签署证书.python脚本
- 格式:docx
- 大小:15.05 KB
- 文档页数:5
快速运用Python实现WebSocket编程Python可以实现WebSocket编程,尤其是在实现即时通讯和及时交换数据方面,它在建立双向实时有效的连接方面有优势。
WebSocket是一种使用TCP/IP协议的开放标准,可以在Web浏览器和Web应用程序之间建立全双工通信连接,即客户端和服务器之间都可以接收和发送数据。
使用WebSocket,客户端可以主动发起连接,服务器也可以主动推送消息到客户端。
它可以替代HTTP或TCP协议,进行实时双向数据传输,无需任何插件或外部程序。
Python可以使用websockets库来快速实现WebSocket编程。
websockets库是一个简便、轻量而完整的WebSocket客户端和服务器库。
它使用asyncio模块的异步API支持实时交互,支持Python 3.6以上版本。
要使用websockets库,首先需要安装它:pip install websockets。
然后,开发者可以编写Python脚本来实现WebSocket编程,如下所示:# 导入websockets库import websockets# 定义一个异步程序来创建websocket连接async def create_websocket():websocket = await websockets.connect(‘ws://127.0.0.1:8000’) print(‘Connected!’)# 启动异步程序asyncio.get_event_loop().run_until_complete(create_websocket())在上面的示例中,使用websockets库可以很容易地创建一个WebSocket连接,并且异步编程可以方便地支持实时交互功能。
此外,websockets库还提供了一些接口,用于处理WebSocket连接,比如读取和发送消息、检查连接状态以及处理连接断开。
同样,这些接口也是异步的,可以支持多个连接的并发处理。
Python3webservice接⼝测试代码详解⼀、使⽤python3做webervice接⼝测试的第三⽅库选择suds-jurko库,可以直接pip命令直接下载,也可以在pypi官⽹下载压缩包进⾏⼿动安装⼆、安装好后,导⼊Client:from suds.client import Client。
发送⼀条请求from suds.client import Clienturl = '/WebServices/WeatherWebService.asmx?wsdl'client = Client(url)# 打印所有webservice接⼝信息print(client)但是会出现错误:Traceback (most recent call last):File "E:/PycharmProjects/lianxiUItestSelenium/***.py", line 53, in <module>client = Client('/WebServices/WeatherWebService.asmx?wsdl')File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds\client.py", line 115, in __init__self.wsdl = reader.open(url)File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds\reader.py", line 150, in opend = self.fn(url, self.options)File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds\wsdl.py", line 159, in __init__self.build_schema()File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds\wsdl.py", line 220, in build_schemaself.schema = container.load(self.options)File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds sd\schema.py", line 94, in loadchild.dereference()File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds sd\schema.py", line 319, in dereferencemidx, deps = x.dependencies()File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds sd\sxbasic.py", line 437, in dependenciese = self.__deref()File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds sd\sxbasic.py", line 483, in __derefraise TypeNotFound(self.ref)suds.TypeNotFound: Type not found: '(schema, /2001/XMLSchema, )'三、只需要过滤掉⼀下地址就可以了。
创建和使用RESTful WebService的实例:1. 首先,我们需要安装一个Web框架,例如Flask。
在命令行中输入以下命令进行安装:```pip install Flask```2. 创建一个名为`app.py`的文件,并在其中编写以下代码:```pythonfrom flask import Flask, jsonify, requestapp = Flask(__name__)@app.route('/api/data', methods=['GET'])def get_data():data = {'name': '张三','age': 30,'city': '北京'}return jsonify(data)if __name__ == '__main__':app.run(debug=True)```这个简单的示例创建了一个名为`get_data`的函数,该函数返回一个包含姓名、年龄和城市的JSON对象。
我们使用`@app.route`装饰器将此函数与URL路径`/api/data`关联起来,并指定允许的HTTP方法为`GET`。
3. 保存文件后,在命令行中运行以下命令启动Web服务:```python app.py```4. 现在,我们可以使用浏览器或其他HTTP客户端访问`ip:5000/api/data`,看到返回的JSON 数据。
这只是一个简单的RESTful WebService实例,实际应用中可能需要处理更复杂的数据结构和业务逻辑。
python web窗体认证方法Python web form authentication methods can be used to secure web applications by verifying the identity of users accessing the application. One common method of authentication is using a username and password combination. This allows users to securely log in and access their accounts, while also protecting sensitive information from unauthorized access. Python provides several libraries and frameworks that can be used to implement web form authentication, including Flask, Django, and Tornado. These tools offer various features and functionality for implementing secure authentication in web applications.Python web窗体认证方法可以用于通过验证访问应用程序的用户的身份来保护Web应用程序。
一种常见的认证方法是使用用户名和密码组合。
这使用户可以安全地登录并访问他们的帐户,同时还保护敏感信息免受未经授权的访问。
Python提供了几个可以用于实现Web窗体认证的库和框架,包括Flask,Django和Tornado。
这些工具提供了各种功能和功能,用于在Web应用程序中实现安全认证。
WebSocketServer的Python实现WebSocket是一种在Web浏览器和服务器之间进行双向通信的协议。
它提供了一种实时的通信机制,可以使服务器主动向客户端发送数据,而不需要客户端发起请求。
在Python中,我们可以使用第三方库来进行WebSocket的实现。
Python中最常用的WebSocket库是`websocket`。
它提供了WebSocket的客户端和服务器的实现。
在本文中,我们将重点介绍如何使用`websocket`库来实现WebSocket服务器。
首先,我们需要用`pip`安装`websocket`库。
在终端中运行以下命令:```pip install websocket```安装完成后,我们可以开始编写WebSocket服务器的代码。
以下是一个简单的示例:```pythonimport websocketimport threading#当接收到消息时的回调函数def on_message(ws, message):print('Received Message:', message)#当连接建立成功时的回调函数def on_open(ws):print('Connection Opened')#创建一个子线程来定时向客户端发送消息def run(*args):for i in range(10):message = 'Hello {}'.format(i)ws.send(message)ws.closeprint('Connection Closed')threading.Thread(target=run).start#当连接关闭时的回调函数def on_close(ws):print('Connection Closed')# 创建WebSocket连接websocket.enableTrace(True)ws = websocket.WebSocketApp('ws://localhost:8000/', on_message=on_message, on_open=on_open, on_close=on_close) #启动连接ws.run_forever```在上面的代码中,我们首先定义了当收到消息、建立连接和关闭连接时的回调函数。
Python Pdf数字签名证书内容
在Python中,可以使用PyPDF2和PyMuPDF库来处理PDF文档,包括数字签名。
数字签名证书的内容主要包括私钥和公钥,它们是成对出现的。
首先,你需要生成一个数字证书和私钥。
可以使用OpenSSL工具,具体的操作步骤如下:
bash
openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out certificate.crt
这将生成一个名为private.key的私钥文件和一个名为certificate.crt的证书文件。
然后,在Python代码中,你需要导入PyPDF2和PyMuPDF库来处理PDF文档。
可以使用以下代码导入这两个库:
python
import PyPDF2
import fitz # PyMuPDF库的别名
接下来,你可以使用私钥和证书对PDF文档进行数字签名。
具体的实现方式取决于你使用的库和PDF签名算法。
你可以查阅相关文档或示例代码来了解更多关于数字签名的信息。
python调⽤基于soap的webservicePython 调⽤webservice服务python 可以作为webservice的客户端以及服务端,本⽂主要是以讲述,python作为客户端怎么来调⽤基于soap 的webservice服务端可以参考:本⽂的代码是python3.X版本前置条件1. Python访问webservice接⼝⽤到的⼯具包是suds,但是由于该⼯具包没有在维护了,本⽂使⽤suds的分⽀项⽬suds-community2. 安装suds-community,pip install suds-community 博主测试过suds-py3包以及suds-jurko这三个包都可以⽤3. 免费的webservice⽹站,/zh_cn/web_services.aspx。
准备好前置条件后from suds.client import Client# 连接到webservice服务,获取查询天⽓服务⽅法client=Client('/WebServices/WeatherWS.asmx?wsdl')print(client)#### ⼀定要注意URL后⼀定要加wsdl如果连接没问题,就可以直接调⽤webservice中的⽅法 , 详细的访问名以及调⽤的⽅法可以直接 URL中查看调⽤⽅法如下:# 查询⼿机号码归属地print(client.service.getMobileCodeInfo("183********",""))# 183********:⼴东深圳⼴东移动全球通卡经常会出现的问题集合配置以下⼏点可以解决95%左右的问题:⽰例常见的错误:以下是常见的两种错误⽅式:from suds.client import Clientfrom suds.xsd.doctor import ImportDoctor, Importfrom suds.xsd import sxbasicsxbasic.Import.bind('/2001/XMLSchema', 'file:' + str(BASE_DIR) + '/runCIA/suds/XMLSchema.xml')imp = Import('/2001/XMLSchema')# 添加过滤空间imp.filter.add('/InnoLux/WebServices')doctor = ImportDoctor(imp)verification_url = 'http://xxxxxxxxxxx/xxxxxx/xxxxxxxx.asmx?wsdl'verification_client = Client(verification_url, doctor=doctor)错误的原因是没有正确的引⼊命名空间。
webservice ssl版本协议概述及解释说明1. 引言1.1 概述在当今互联网技术快速发展的背景下,网络安全问题已经成为一个关注的焦点。
随着Web服务的普及和应用范围的扩大,WebService SSL(安全套接层)版本协议作为一种保护数据传输安全性的重要手段被广泛应用。
本文将对WebService SSL版本协议进行深入探讨,并详细解释其原理和应用方法,通过对实际案例分析和常见问题解决方案的研究,进一步提供相应的高级应用技巧和建议分享。
1.2 文章结构文章主要分为五个部分组成。
首先,在引言部分我们将进行概述,介绍WebService SSL版本协议所涉及到的内容及研究目的。
其次,在"Webservice SSL版本协议概述"部分,我们将对SSL协议进行简要介绍,并回顾其历史演变过程,并阐述其在Webservice中的应用情况。
紧接着,在"Webservice SSL 版本协议解释说明"部分,我们将详细解释SSL握手过程、加密算法以及证书验证过程等相关内容。
在"实际应用案例分析"部分,我们将以典型Webservice服务为例,介绍常用的SSL版本协议,并对其进行深入分析。
同时,我们还将讨论常见安全性问题,并提供解决方案。
最后,在"结论与展望"部分,我们将对全文进行总结,并对WebService SSL版本协议的未来发展做出一定的展望。
1.3 目的本文旨在清晰明了地介绍Webservice SSL版本协议,并深入解释其原理和应用方法,为读者提供关于Webservice安全性保障方面的知识和技巧。
通过实际应用案例分析和解决方案讨论,读者可以进一步了解SSL版本协议在Webservice 中的具体应用场景,并掌握相关的安全性问题排查和预防方法。
希望本文能够为广大用户、开发人员以及系统管理员提供参考价值,增加对网络安全问题的认识并提高相关技能水平。
python 调用webservice list参数(最新版)目录1.Python 简介2.WebService 简介3.Python 调用 WebService 的方法4.调用 WebService list 参数的实例5.总结正文1.Python 简介Python 是一种广泛使用的高级编程语言,以其简洁的语法和强大的功能而闻名。
Python 被广泛用于各种场景,包括 Web 开发、数据分析、人工智能等。
2.WebService 简介WebService 是一种通过网络提供服务的应用程序,它使用标准化的协议,如 HTTP 和 XML,以便与其他应用程序进行通信。
WebService 可以包括各种功能,如数据存储、数据处理和业务逻辑。
3.Python 调用 WebService 的方法Python 提供了多种方法来调用 WebService。
其中最常用的方法是使用SOAP(Simple Object Access Protocol)和 XML-RPC(Remote Procedure Call)库。
4.调用 WebService list 参数的实例下面是一个使用 Python 调用 WebService list 参数的实例。
假设我们有一个 WebService,它提供一个名为"get_list"的方法,该方法接受一个整数参数"page_size"和一个整数参数"page_number"。
```pythonimport soaplib# 创建一个 SOAP 请求对象request = soaplib.SoapRequest("get_list", soaplib.NS)# 设置请求参数request.add_parameter("page_size", "10")request.add_parameter("page_number", "1")# 调用 WebServiceresponse = soaplib.SoapResponse(request)# 解析响应print(response.body.decode("utf-8"))```在这个例子中,我们首先导入了 soaplib 库,然后创建了一个 SOAP 请求对象。
⼀键⽣成ssl⾃签名证书脚本#!/bin/bash -e# * 为必改项# * 更换为你⾃⼰的域名CN='' # 例如: # 扩展信任IP或域名## ⼀般ssl证书只信任域名的访问请求,有时候需要使⽤ip去访问server,那么需要给ssl证书添加扩展IP,## 多个IP⽤逗号隔开。
如果想多个域名访问,则添加扩展域名(SSL_DNS),多个SSL_DNS⽤逗号隔开SSL_IP='' # 例如: 1.2.3.4SSL_DNS='' # 例如: # 国家名(2个字母的代号)C=CN# 证书加密位数SSL_SIZE=2048# 证书有效期DATE=${DATE:-3650}# 配置⽂件SSL_CONFIG='f'if [[ -z $SILENT ]]; thenecho"----------------------------"echo"| SSL Cert Generator |"echo"----------------------------"echofiexport CA_KEY=${CA_KEY-"cakey.pem"}export CA_CERT=${CA_CERT-"cacerts.pem"}export CA_SUBJECT=ca-$CNexport CA_EXPIRE=${DATE}export SSL_CONFIG=${SSL_CONFIG}export SSL_KEY=$CN.keyexport SSL_CSR=$CN.csrexport SSL_CERT=$CN.crtexport SSL_EXPIRE=${DATE}export SSL_SUBJECT=${CN}export SSL_DNS=${SSL_DNS}export SSL_IP=${SSL_IP}export K8S_SECRET_COMBINE_CA=${K8S_SECRET_COMBINE_CA:-'true'}[[ -z $SILENT ]] && echo"--> Certificate Authority"if [[ -e ./${CA_KEY} ]]; then[[ -z $SILENT ]] && echo"====> Using existing CA Key ${CA_KEY}"else[[ -z $SILENT ]] && echo"====> Generating new CA key ${CA_KEY}"openssl genrsa -out ${CA_KEY} ${SSL_SIZE} > /dev/nullfiif [[ -e ./${CA_CERT} ]]; then[[ -z $SILENT ]] && echo"====> Using existing CA Certificate ${CA_CERT}"else[[ -z $SILENT ]] && echo"====> Generating new CA Certificate ${CA_CERT}"openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} \-days ${CA_EXPIRE} -out ${CA_CERT} -subj "/CN=${CA_SUBJECT}" > /dev/null || exit 1fiecho"====> Generating new config file ${SSL_CONFIG}"cat > ${SSL_CONFIG} <<EOM[req]req_extensions = v3_reqdistinguished_name = req_distinguished_name[req_distinguished_name][ v3_req ]basicConstraints = CA:FALSEkeyUsage = nonRepudiation, digitalSignature, keyEnciphermentextendedKeyUsage = clientAuth, serverAuthEOMif [[ -n ${SSL_DNS} || -n ${SSL_IP} ]]; thencat >> ${SSL_CONFIG} <<EOMsubjectAltName = @alt_names[alt_names]EOMIFS=","dns=(${SSL_DNS})dns+=(${SSL_SUBJECT})for i in"${!dns[@]}"; doecho DNS.$((i+1)) = ${dns[$i]} >> ${SSL_CONFIG}doneif [[ -n ${SSL_IP} ]]; thenip=(${SSL_IP})for i in"${!ip[@]}"; doecho IP.$((i+1)) = ${ip[$i]} >> ${SSL_CONFIG}donefifi[[ -z $SILENT ]] && echo"====> Generating new SSL KEY ${SSL_KEY}"openssl genrsa -out ${SSL_KEY} ${SSL_SIZE} > /dev/null || exit 1[[ -z $SILENT ]] && echo"====> Generating new SSL CSR ${SSL_CSR}"openssl req -sha256 -new -key ${SSL_KEY} -out ${SSL_CSR} \-subj "/CN=${SSL_SUBJECT}" -config ${SSL_CONFIG} > /dev/null || exit 1[[ -z $SILENT ]] && echo"====> Generating new SSL CERT ${SSL_CERT}"openssl x509 -sha256 -req -in ${SSL_CSR} -CA ${CA_CERT} \-CAkey ${CA_KEY} -CAcreateserial -out ${SSL_CERT} \-days ${SSL_EXPIRE} -extensions v3_req \-extfile ${SSL_CONFIG} > /dev/null || exit 1if [[ -z $SILENT ]]; thenecho"====> Complete"echo"keys can be found in volume mapped to $(pwd)"echoecho"====> Output results as YAML"echo"---"echo"ca_key: |"cat $CA_KEY | sed's/^/ /'echoecho"ca_cert: |"cat $CA_CERT | sed's/^/ /'echoecho"ssl_key: |"cat $SSL_KEY | sed's/^/ /'echoecho"ssl_csr: |"cat $SSL_CSR | sed's/^/ /'echoecho"ssl_cert: |"cat $SSL_CERT | sed's/^/ /'echofiif [[ -n $K8S_SECRET_NAME ]]; thenif [[ -n $K8S_SECRET_COMBINE_CA ]]; then[[ -z $SILENT ]] && echo"====> Adding CA to Cert file"cat ${CA_CERT} >> ${SSL_CERT}fi[[ -z $SILENT ]] && echo"====> Creating Kubernetes secret: $K8S_SECRET_NAME" kubectl delete secret $K8S_SECRET_NAME --ignore-not-foundif [[ -n $K8S_SECRET_SEPARATE_CA ]]; thenkubectl create secret generic \$K8S_SECRET_NAME \--from-file="tls.crt=${SSL_CERT}" \--from-file="tls.key=${SSL_KEY}" \--from-file="ca.crt=${CA_CERT}"elsekubectl create secret tls \$K8S_SECRET_NAME \--cert=${SSL_CERT} \--key=${SSL_KEY}fiif [[ -n $K8S_SECRET_LABELS ]]; then[[ -z $SILENT ]] && echo"====> Labeling Kubernetes secret"IFS=$' \n\t' # We have to reset IFS or label secret will misbehave on some systems kubectl label secret \$K8S_SECRET_NAME \$K8S_SECRET_LABELSfifiecho"4. 重命名服务证书"mv ${CN}.key tls.keymv ${CN}.crt tls.crt复制以上代码另存为create_self-signed-cert.sh或者其他您喜欢的⽂件名。
python使用suds调用webservice接口的方法
以下是使用Python 的Suds 库调用Webservice 接口的一般步骤:
1.安装Suds:在Mac 系统中使用sudo pip install suds命令,在Linux
系统中使用easy_install suds命令进行安装,也可以前往官网下载Suds 代码,再本地安装。
2.引用初始化:使用from suds.client import Client导入Suds 库,并
创建一个Client 对象。
3.设置URL:将Webservice 的WSDL 地址赋值给url变量。
4.实例化Client:使用Client(url)创建一个Client 实例。
5.打印Client:打印client对象,可查看Webservice 的基本信息。
6.调用方法:使用client.service.方法名()调用Webservice 中的方法,
并传入相应的参数。
需要注意的是,在调用Webservice 接口时,需要确保URL 地址正确,并且Webservice 返回的数据格式为XML 格式,否则可能会出现解析异常。
此外,还可以使用Suds 库的Factory 类创建和设置API 头信息,以便在调用方法时传递额外的参数。
Python调用Webservice传递List参数详解
Webservice是一种通过HTTP协议在Web上提供的服务,可以由不同的语言编写,包括Python。
在Python中,我们可以使用各种库来调用Webservice,例如requests、xmlrpclib、jsonrpclib等。
当需要传递List参数时,我们需要注意一些细节。
下面是一个使用requests 库在Python中调用Webservice并传递List参数的示例:
在这个示例中,我们使用了requests库来发送POST请求。
我们首先定义了Webservice的URL和要传递的参数。
其中,param2是一个List参数。
然后,我们使用requests.post()方法发送POST请求,并将参数以JSON格式传递。
最后,我们解析响应并处理结果。
需要注意的是,在发送请求时,我们需要将参数以JSON格式传递。
这是因为许多Webservice都要求将参数以JSON格式传递。
另外,在解析响应时,我们使用response.json()方法将响应内容解析为JSON格式。
如果Webservice返回了错误状态码,我们需要在代码中处理这个错误。
python调用webservice接口方法Python是一种高级编程语言,可用于许多应用程序,包括与Web服务通信。
本文将介绍如何使用Python调用Web服务接口方法。
Web服务是一种交换数据的方式,它使用基于XML的协议来传输数据。
Web服务接口方法是Web服务提供的一组函数,可用于与Web服务进行交互。
使用Python调用Web服务接口方法需要以下步骤:1. 导入所需的库和模块。
Python提供了许多库和模块,可用于与Web服务通信。
例如,可以使用urllib库来发送HTTP请求,使用xml.etree.ElementTree模块来解析XML响应。
2. 创建SOAP请求消息。
SOAP是一种基于XML的协议,用于在Web服务之间交换信息。
SOAP请求消息包括Envelope、Header和Body元素。
Envelope元素包含Header和Body元素,Header元素包含任何标题信息,Body元素包含Web服务接口方法和参数。
3. 发送SOAP请求消息到Web服务。
将SOAP请求消息作为HTTP POST请求发送到Web服务。
可以使用urllib库中的urlopen()函数发送HTTP请求。
4. 解析Web服务响应。
Web服务响应是一个XML文档,包含Web服务接口方法的返回值。
可以使用xml.etree.ElementTree模块解析XML响应,并提取所需的信息。
使用Python调用Web服务接口方法需要了解Web服务的WSDL文件。
WSDL是一种描述Web服务接口的XML文档,包含Web服务的方法、参数和返回值。
可以使用WSDL文件来生成Python客户端代码,以方便使用Web服务接口方法。
在本文中,我们介绍了使用Python调用Web服务接口方法的步骤。
使用Python调用Web服务接口方法需要熟悉SOAP协议、HTTP 请求和XML解析。
掌握这些技能可以帮助开发人员更好地使用Web 服务,提高应用程序的功能和性能。
Python调用webservice接口是一个常见的需求,特别是在与其他系统进行数据交互的情况下。
通过使用Python的相关库和工具,我们可以很容易地实现对webservice接口的调用,并且获取到需要的数据或者执行相应的操作。
下面,我们将详细介绍如何使用Python来调用webservice接口的代码。
一、准备工作在开始编写Python代码之前,我们需要确保已经安装了相关的库和工具。
常用的库包括suds-jurko、zeep等,这些库提供了便捷的方式来处理webservice接口的调用。
我们也可以使用Python自带的库来完成这个任务,但是使用第三方库会更加方便和高效。
1. 安装suds-jurko库suds-jurko是一个Python的库,用于处理SOAP协议的webservice接口。
我们可以通过pip命令来安装这个库,执行以下命令即可完成安装:```shellpip install suds-jurko```2. 安装zeep库zeep是另一个Python的库,也是用于处理SOAP协议的webservice接口。
与suds-jurko类似,通过pip命令来安装这个库,执行以下命令即可完成安装:```shellpip install zeep```3. 导入所需的库在Python代码中,我们需要导入相应的库和工具,以便在代码中使用。
对于suds-jurko和zeep库,我们需要在代码中进行导入:```pythonfrom suds.client import Clientfrom zeep import Client```二、调用webservice接口一旦完成了准备工作,我们可以开始编写Python代码来调用webservice接口。
接下来,我们将介绍两种常用的方式,一种是使用suds-jurko库,另一种是使用zeep库。
1. 使用suds-jurko库suds-jurko库提供了一个Client类,用于创建webservice接口的客户端。
用于生成WebService使用的数字证书及签署证书.python脚本#! /bin/env python# -*- encoding:gbk -*-"""用于生成WebService使用的CA及并且签署证书"""import sys,shutil,os,subprocess,getpassconfigure={"debug":False}def quiet_run(cmd,argstr=None):nf=file(os.devnull,"rw")if configure["debug"]:p=subprocess.Popen(cmd,stdin=subprocess.PIPE)else:p=subprocess.Popen(cmd,stdin=subprocess.PIPE,stdout=nf, stderr=nf) if argstr is not None:p.stdin.write(argstr)p.stdin.write("\n")p.stdin.flush()p.wait()def get_indentity():"""取得用户身份信息"""print "请输入你的身份信息,这些信息将被附加到证书上,以便于客户确认您的身份"print "只输入英文"identity={}identity["C"]="CN"identity["ST"]=raw_input("请输入您的省份:")identity["L"]=raw_input("请输入您的城市:")identity["O"]=raw_input("请输入您的单位名称:")identity["OU"]=raw_input("请输入您的部门名称:")identity["CN"]=raw_input("请输入您的名字:")identity["EMAILADDRESS"]=raw_input("请输入您的电子邮箱地址:")#连接成OpenSSL要求的X500格式字符串subj="".join(["/"+"=".join((key,identity[key])) for key in identity if len(identity[key])>0])print "您的身份认证信息是%s"%subjprintreturn subjdef create_ca():#取得用户身份subj=get_indentity()#要求输入密码和证书文件名password=""cafile=""while password.strip()=="":password=raw_input("请输入保护CA证书的密码(明文显示):") print "请记录好该密码,如果丢失该密码,将可能面临安全性破坏和重新部署客户端的风险"while cafile.strip()=="":cafile=raw_input("请输入CA证书的文件名:")try:quiet_run("openssl genrsa -out __zt_cakey.pem 1024")quiet_run("openssl req -new -out __zt_careq.csr -key __zt_cakey.pem -subj %s"%subj)quiet_run("openssl x509 -req -in __zt_careq.csr -out __zt_cacert.pem -signkey __zt_cakey.pem -days %s"%configure["days"])quiet_run("openssl pkcs12 -export -clcerts -in __zt_cacert.pem -inkey __zt_cakey.pem -out %s -passout stdin"%(cafile,),password)finally:try:os.unlink("__zt_cakey.pem")os.unlink("__zt_careq.csr")os.unlink("__zt_cacert.pem")except:passdef create_store():print "将为服务器/客户端生成并使用CA证书签署的证书文件"cafile=""while cafile.strip()=="":cafile=raw_input("请输入CA证书的文件名:")capassword=""while capassword.strip()=="":capassword=getpass.getpass("请输入CA证书的密码(不回显):") storefile=""while storefile.strip()=="":storefile=raw_input("请输入新证书的文件名:")storepassword=""while storepassword.strip()=="":storepassword=raw_input("请输入保护新证书的密码(明文显示):") storetype=""cacertfile=""while storetype=="":print "Java支持两种格式的证书存储格式,一种是Java环境私有的JKS 格式,另一种是RFC标准的PKCS#12格式。
python webservice调用Python Webservice调用是指使用Python编程语言来调用Web Service服务。
Web Service是一种基于网络的服务,它通过HTTP协议传输数据,并使用XML格式进行数据交换。
Python提供了多种方式来调用Web Service服务,包括SOAP、RESTful等。
一、SOAP方式调用Web Service服务SOAP(Simple Object Access Protocol)是一种基于XML的协议,它定义了一套标准的消息格式和传输规则。
使用SOAP方式调用Web Service服务需要以下步骤:1. 安装suds库:在Python中使用suds库来实现SOAP方式调用Web Service服务。
可以通过pip命令安装suds库。
2. 获取WSDL文件:WSDL(Web Services Description Language)是一种描述Web Service服务的语言,它定义了Web Service的接口和方法等信息。
在使用SOAP方式调用Web Service服务时需要获取WSDL文件。
3. 生成客户端代码:使用suds库的命令行工具suds.client可以根据WSDL文件生成客户端代码。
4. 调用WebService方法:通过生成的客户端代码可以直接调用WebService方法,获取返回结果。
二、RESTful方式调用Web Service服务RESTful(Representational State Transfer)是一种基于HTTP协议设计的架构风格,它将资源抽象为URI(统一资源标识符),通过HTTP请求对资源进行操作。
使用RESTful方式调用Web Service服务需要以下步骤:1. 安装requests库:在Python中使用requests库来实现RESTful方式调用Web Service服务。
可以通过pip命令安装requests库。
python调⽤webservice接⼝的实现使⽤suds这个第三⽅模块from suds.client import Clienturl = 'http://ip:port/?wsdl'cilent=Client(url)print cilent查看webservice接⼝的具体信息:调⽤接⼝⽅法,通常client.service.methodname实际测试过程中遇到的坑:1、tns 值为Localhost之前查看接⼝信息时,未发现tns="http://Localhost:4567/Interface.wsdl",这个被设置成Localhost,导致通过接⼝调⽤时,只能在webservice接⼝本地服务器上才能调⽤成功,其他服务器调⽤时,接⼝中的⽅法都⽆法获取。
⼤坑!解决⽅法:修改webservice接⼝对应的wsdl⽂件 Interface.wsdl,将其中的Localhost改成具体ip即可。
2、接⼝⽅法名不符合python命名规范⽐如上述的⽅法,⽆法直接这样调⽤解决办法:python内置函数getattr 。
getattr(cilent.service,'ser-GetAreaID')('1')3、接⼝⽅法传参此⽅法为例1、⽅法⼀:soap_rep=getattr(soapService, 'ser-SetValue')(nSetFlag=1,nSystemID=1,nRecordNo=440002028,nTableNo=18,cValue='225',UserName='admin')2、⽅法⼆:soap_rep=getattr(soapService, 'ser-SetValue')(1,1,440002028,18,'225','admin') # 需要⼀⼀对应以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
#! /bin/env python# -*- encoding:gbk -*-"""用于生成WebService使用的CA及并且签署证书"""import sys,shutil,os,subprocess,getpassconfigure={"debug":False}def quiet_run(cmd,argstr=None):nf=file(os.devnull,"rw")if configure["debug"]:p=subprocess.Popen(cmd,stdin=subprocess.PIPE)else:p=subprocess.Popen(cmd,stdin=subprocess.PIPE,stdout=nf,stderr=nf) if argstr is not None:p.stdin.write(argstr)p.stdin.write("\n")p.stdin.flush()p.wait()def get_indentity():"""取得用户身份信息"""print "请输入你的身份信息,这些信息将被附加到证书上,以便于客户确认您的身份"print "只输入英文"identity={}identity["C"]="CN"identity["ST"]=raw_input("请输入您的省份:")identity["L"]=raw_input("请输入您的城市:")identity["O"]=raw_input("请输入您的单位名称:")identity["OU"]=raw_input("请输入您的部门名称:")identity["CN"]=raw_input("请输入您的名字:")identity["EMAILADDRESS"]=raw_input("请输入您的电子邮箱地址:")#连接成OpenSSL要求的X500格式字符串subj="".join(["/"+"=".join((key,identity[key])) for key in identity if len(identity[key])>0])print "您的身份认证信息是%s"%subjprintreturn subjdef create_ca():#取得用户身份subj=get_indentity()#要求输入密码和证书文件名password=""cafile=""while password.strip()=="":password=raw_input("请输入保护CA证书的密码(明文显示):") print "请记录好该密码,如果丢失该密码,将可能面临安全性破坏和重新部署客户端的风险"while cafile.strip()=="":cafile=raw_input("请输入CA证书的文件名:")try:quiet_run("openssl genrsa -out __zt_cakey.pem 1024")quiet_run("openssl req -new -out __zt_careq.csr -key __zt_cakey.pem -subj %s"%subj)quiet_run("openssl x509 -req -in __zt_careq.csr -out __zt_cacert.pem -signkey __zt_cakey.pem -days %s"%configure["days"])quiet_run("openssl pkcs12 -export -clcerts -in __zt_cacert.pem -inkey __zt_cakey.pem -out %s -passout stdin"%(cafile,),password)finally:try:os.unlink("__zt_cakey.pem")os.unlink("__zt_careq.csr")os.unlink("__zt_cacert.pem")except:passdef create_store():print "将为服务器/客户端生成并使用CA证书签署的证书文件"cafile=""while cafile.strip()=="":cafile=raw_input("请输入CA证书的文件名:")capassword=""while capassword.strip()=="":capassword=getpass.getpass("请输入CA证书的密码(不回显):") storefile=""while storefile.strip()=="":storefile=raw_input("请输入新证书的文件名:")storepassword=""while storepassword.strip()=="":storepassword=raw_input("请输入保护新证书的密码(明文显示):") storetype=""cacertfile=""while storetype=="":print "Java支持两种格式的证书存储格式,一种是Java环境私有的JKS 格式,另一种是RFC标准的PKCS#12格式。
如果在SUN Java环境下,优先使用JKS格式,而其它环境则优先使用PKCS#12格式"answer=raw_input("请选择,1-JKS格式,2-PKCS#12: ")if answer=="1":storetype="JKS"if answer=="2":storetype="PKCS12"print "因为PKCS#12格式的存储格式不能同时包含CA的证书,生成客户端密钥之后将同时为您导出CA证书。
"while cacertfile=="":cacertfile=raw_input("请输入导出CA证书的文件名:")subj=get_indentity()try:#生成未加密的CA公钥quiet_run("openssl pkcs12 -in %(cafile)s -clcerts -nodes -nokeys -out __zt_cacert.pem.1 -passin stdin"%{"cafile":cafile},capassword)#去掉公钥文件的前四行,否则不兼容Java JSSEfp=file("__zt_cacert.pem.1")for i in range(4):fp.readline()buf=fp.read()fp.close()fp=file("__zt_cacert.pem","w")fp.write(buf)fp.close()#生成未加密的CA密钥quiet_run("openssl pkcs12 -in %(cafile)s -clcerts -nodes -out __zt_cafile.pem -passin stdin"%{"cafile":cafile},capassword)quiet_run("openssl rsa -in __zt_cafile.pem -out __zt_cakey.pem")#生成新证书if storetype=="JKS":subj=subj.replace("/",",")[1:]quiet_run("keytool -genkey -alias mykey -keyalg rsa -keysize 1024 -validity %(days)s -keypass %(storepassword)s -storepass %(storepassword)s -keystore %(storefile)s -storetype %(storetype)s -dname %(dname)s"%\{"days":configure["days"],"storepassword":storepassword,"storefile":storefile,"storetype":storety pe,"dname":subj})quiet_run("keytool -certreq -alias mykey -sigalg MD5withRSA -file __zt_myreq.csr -keystore %(storefile)s -storepass %(storepassword)s"%\{"storepassword":storepassword,"storefile":storefile})quiet_run("openssl x509 -req -in __zt_myreq.csr -out __zt_mycert.pem -CA __zt_cacert.pem -CAkey __zt_cakey.pem -days %(days)s -CAcreateserial -sha1 -trustout -CA __zt_cacert.pem -CAkey __zt_cakey.pem -days %(days)s -CAserial ca-cert.srl-sha1 -trustout"%\{"days":configure["days"]})quiet_run("keytool -import -alias __zt_caroot -noprompt -keystore %(storefile)s -storepass %(storepassword)s -file __zt_cacert.pem"%\{"storepassword":storepassword,"storefile":storefile})quiet_run("keytool -import -alias mykey -trustcacerts -noprompt -keystore %(storefile)s -storepass %(storepassword)s -file __zt_mycert.pem"%\{"storepassword":storepassword,"storefile":storefile})#quiet_run("keytool -delete -alias __zt_caroot -keystore %(storefile)s -storepass %(storepassword)s"%\#{"storepassword":storepassword,"storefile":storefile})elif storetype=="PKCS12":quiet_run("openssl genrsa -out __zt_mykey.pem 1024")quiet_run("openssl req -new -out __zt_myreq.csr -key __zt_mykey.pem -subj %s"%subj)quiet_run("openssl x509 -req -in __zt_myreq.csr -out __zt_mycert.pem -CAkey __zt_cakey.pem -CA __zt_cacert.pem -days %(days)s -CAcreateserial -CAserial ca-cert.srl -sha1 -trustout"%\{"days":configure["days"]})quiet_run("openssl pkcs12 -export -clcerts -in __zt_mycert.pem -inkey __zt_mykey.pem -out %(storefile)s -passout stdin"%\{"storefile":storefile},storepassword)os.rename("__zt_cacert.pem",cacertfile)except:try:os.unlink(storefile)except:passfinally:try:os.unlink("__zt_cacert.pem.1")os.unlink("__zt_cacert.pem")os.unlink("__zt_cafile.pem")os.unlink("__zt_cakey.pem")if storetype=="JKS":os.unlink("__zt_myreq.csr")os.unlink("__zt_mycert.pem")else:os.unlink("__zt_mykey.pem")os.unlink("__zt_myreq.csr")os.unlink("__zt_mycert.pem")except:passdef usage():print """使用方法错误%(cmdname)s newca:创建一个CA证书%(cmdname)s newstore:创建一个证书"""%{"cmdname":sys.argv[0]}sys.exit(1)def main(argv):configure["days"]=365*3if len(argv)<2:usage()if argv[1]=="newca":create_ca()elif argv[1]=="newstore":create_store()if __name__=="__main__":main(sys.argv)。