Python 调用 WebService

本文介绍了如何在Python中作为客户端调用WebService。通过配置URL获取服务器B的Wsdl描述符,然后尝试连接。如果连接失败,客户端请求将宣告失败。示例代码展示了如何初始化、设置请求头以及处理返回的对象数据。
摘要由CSDN通过智能技术生成

服务器A--服务器B

  服务器A为客户端,服务器B实现Webservice请求

  客户端A根据配置的url(该url为服务器B提供的服务),获取wsdl描述符

  检索wsdl描述符中配置的url,尝试连接。若不能连接,则客户端请求失败。


# coding:utf-8

import sys
reload(sys)
sys.setdefaultencoding('utf8')
import openerp.pooler as pooler
from datetime import datetime
from suds.client import Client
import traceback 
import json


KEY_FLAG = "flag"
KEY_ERRORMSG = "errorMsg"
KEY_DATA = "data"
FLAG_SUCCESS = "success"
FLAG_FAIL = "fail"
FAIL_CONNECTED = {KEY_FLAG : FLAG_FAIL, KEY_ERRORMSG : u"接口服务器连接失败!"}
FAIL_SYNCED = {KEY_FLAG : FLAG_FAIL, KEY_ERRORMSG : u"接口获取数据异常!"}
PROJECT_TYPE = {
'implementation': u'实施',
'research':u'研发',
}
PROJECT_INFO_URL = "http://xxxxxxx:8082/services/XXXXPageInquiryWXProjectInfoSrv?wsdl"
MEMBER_INFO_URL = "http://xxxxxxx:8082/services/XXXXPageInquiryWXProtMemberInfoSrv?wsdl"
OPPORTUNITY_INFO = "http://xxxxxxx:8082/services/XXXXPageInquiryWXOpportunityInfoSrv?wsdl"
MSG_HEADER = "MsgHeader"
INPUT = "Input"


import time

if __name__ == '__main__':

#引用初始化

client = Client(PROJECT_INFO_URL)


print client

声明的头信息,用factory的方式实例化

inputs = client.factory.create("Input")
inputs.current_page = 1
inputs.total_record = None
inputs.last_update_date_from = "2005-01-01 00:00:00"
inputs.last_update_date_to = "2015-12-17 23:59:59"
inputs.page_size = 1000

#传递对象参数

#做一个MsgHeader类,定义类属性

MsgHeader = client.factory.create("MsgHeader")
MsgHeader.SOURCE_SYSTEM_ID = "1"
MsgHeader.SOURCE_SYSTEM_NAME = "HRMS"
MsgHeader.USER_ID = "1"
MsgHeader.USER_NAME = "1"
MsgHeader.SUBMIT_DATE = "2015-12-18 00:00:00"


try:

results = []

#返回对象, 返回wsdl传过来的process对象

output = client.service.process(MsgHeader, inputs)
print output

print output.total_record, output.total_page

#得到OutputCollection对象的OutputItem值

#list(set())  去重

results = list(set(output.OutputCollection.OutputItem))
print len(results)

except Exception:
traceback.print_exc()  
client.last_received()


class Call_interface():
url = None

def __init__(self, url):
self.url = url

def getClient(self):
client = None
try:
client = Client(self.url)
except Exception:
traceback.print_exc()
return client


def getMsgHeader(self, SOURCE_SYSTEM_ID, SOURCE_SYSTEM_NAME, USER_ID, USER_NAME, SUBMIT_DATE):
client = self.getClient()
if not client:

return FAIL_CONNECTED

#设置请求头msgHeader 

msgHeader = client.factory.create(MSG_HEADER)
msgHeader.SOURCE_SYSTEM_ID = SOURCE_SYSTEM_ID
msgHeader.SOURCE_SYSTEM_NAME = SOURCE_SYSTEM_NAME
msgHeader.USER_ID = USER_ID
msgHeader.USER_NAME = USER_NAME
msgHeader.SUBMIT_DATE = SUBMIT_DATE
return msgHeader
#得到请求头带的值input 
def getInput(self, page_size, end_date, start_date="2017-11-01 00:00:00", current_page=1, total_records=None):
client = self.getClient()
if not client:
return FAIL_CONNECTED
input = client.factory.create(INPUT)
input.current_page = current_page
input.total_record = total_records
input.last_update_date_from = start_date
input.last_update_date_to = end_date
input.page_size = page_size
return input

def process(self, msg_header, input):
client = self.getClient()
output = client.service.process(msg_header, input)
return output

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值