python demo
python 3
import hashlib
import sys
from urllib import request, parse
import json
'''
1、Python运行版本:Python 3.6.6
2、运行此程序需要依赖模块urllib,安装方法如下:
pip install urllib
pip install request
'''
encoding = 'utf-8'
if encoding != sys.getdefaultencoding():
reload(sys)
sys.setdefaultencoding(encoding)
class HttpMessage(object):
def __init__(self, Url, userId, md5password, action=None):
self.Url = Url
self.userId = userId
self.md5password = self.GenerateMD5(md5password)
self.action = action
def GetReport(self):
'''
获取状态报告
:return:
'''
return self.OtherSendGet()
def GetMo(self):
'''
获取上行
:return:
'''
return self.OtherSendGet()
def GetBalance(self):
'''
获取余额
:return:
'''
return self.OtherSendGet()
def OtherSendGet(self):
requestUrl = self.Url + '/websms/smsJsonService'
requestParams = 'action={action}&userId={userId}&md5password={md5password}'.format(
action=self.action,
userId=self.userId,
md5password=self.md5password,
)
return self.SendGet(requestUrl, requestParams)
def ContentsToPhones(self, contentArr):
"""
包装多内容下发不同号码的函数
:param contentArr:
:return:字典类型
"""
requestUrl = self.Url + '/batchwebsms/smsJsonService'
ParamsDict = {'userId': self.userId, 'md5password': self.md5password,
'contentArr': json.dumps(contentArr)}
return self.SendPost(requestUrl, ParamsDict)
def ContentArrHandler(self, content, mobile, msgId=None, extCode=None):
'''
处理点对点的内容
:param content:短信内容
:param mobile:手机号
:param msgId:消息ID
:param extCode:扩展码
:return:字典类型
'''
dataDict = {
'content': content,
'mobile': mobile,
}
if msgId != None:
dataDict['msgId'] = msgId
if extCode != None:
dataDict['extCode'] = extCode
return dataDict
def GenerateMD5(self, password):
'''
生成MD5值
:param password:传输的明文
:return:
'''
md5Obj = hashlib.md5()
md5Obj.update(password.encode('UTF-8'))
return md5Obj.hexdigest()
def OneContentToPhones(self, content=None, mobile=None, msgId=None, extCode=None):
'''
单内容多号码批量发送,即群发
:param content:短信内容
:param mobile:手机号码
:param msgId:消息ID
:param extCode:扩展码
:return:发送的返回值
'''
requestUrl = self.Url + '/websms/smsJsonService'
if self.action and self.action == 'sendsms':
dataDict = {'action': self.action, 'userId': self.userId, 'md5password': self.md5password,
'content': content, 'mobile': mobile}
if msgId != None:
dataDict['msgId'] = msgId
if extCode != None:
dataDict['extCode'] = extCode
return self.SendPost(requestUrl, dataDict)
else:
print('缺少action参数,HttpMessage类实例化参数为:action=\'sendsms\'')
def isSSL(self, strData):
'''
判断是否是https的接口
:param strData:需要判断的URL地址
:return:
'''
context = None
if strData.startswith('https://'):
import ssl
context = ssl._create_unverified_context()
return context
def SendPost(self, sendUrl, Data):
'''
采用Post请求
:param sendUrl:接口地址
:param data:需要发送的数据包
:return:
'''
if Data != None:
paramsList = []
for paramsKey, sparamsValue in Data.items():
paramsList.append((paramsKey, sparamsValue))
sendBody = parse.urlencode(paramsList)
reqObj = request.Request(sendUrl)
reqObj.add_header('Content-Type', 'application/x-www-form-urlencoded')
with request.urlopen(reqObj, data=sendBody.encode('utf-8'), context=self.isSSL(sendUrl)) as cnameReq:
if cnameReq.status == 200:
return cnameReq.read().decode('utf-8')
else:
return 'Http Send Error Code %s' % cnameReq.status
else:
return 'Send RequestParams Body Is None'
def SendGet(self, sendUrl, Params):
'''
采用Get请求
:param sendUrl:
:param Params:
:return:
'''
reqObj = request.Request(sendUrl + '?' + Params)
with request.urlopen(reqObj, context=self.isSSL(sendUrl)) as cnameReq:
if cnameReq.status == 200:
return cnameReq.read().decode('utf-8')
else:
return 'Send Fail Error Code:%s' % cnameReq.status
if __name__ == '__main__':
# 请求的URL
Url = 'http://192.168.1.21:8088'
# 接口帐号
userId = 'xll123'
# 接口密码
md5password = '123456'
# 单内容多号码批量发送
# sendSmsObj = HttpMessage(Url, userId, md5password, action='sendsms')
# result = sendSmsObj.OneContentToPhones('【签名1】内%容1', '188888888x1', extCode=None, msgId=None)
# print(result)
# 多内容打包发送
# sendSmsObj = HttpMessage(Url, userId, md5password)
# sendSmsList = []
# sendSmsList.append(sendSmsObj.ContentArrHandler('【签名1】内容1', '188888888x1'))
# sendSmsList.append(sendSmsObj.ContentArrHandler('【签名2】内容2', '188888888x2'))
# print(sendSmsObj.ContentsToPhones(sendSmsList))
# 余额查询
# sendSmsObj = HttpMessage(Url, userId, md5password, action='getbalance')
# result = sendSmsObj.GetBalance()
# print(result)
# 获取短信状态反馈
# sendSmsObj = HttpMessage(Url, userId, md5password, action='getsendreport')
# result = sendSmsObj.GetReport()
# print(result)
# 获取短信上行
# sendSmsObj = HttpMessage(Url, userId, md5password, action='getdeliver')
# result = sendSmsObj.GetReport()
# print(result)
python 2
import hashlib
import sys
import json
import urllib2
import urllib
'''
1、Python运行版本:Python 2.7
2、运行此程序需要依赖模块urllib,安装方法如下:
pip install urllib
pip install urllib2
'''
# Python2 中文兼容问题解决
encoding = 'utf-8'
if encoding != sys.getdefaultencoding():
reload(sys)
sys.setdefaultencoding(encoding)
class HttpMessage(object):
def __init__(self, Url, userId, md5password, action=None):
self.Url = Url
self.userId = userId
self.md5password = self.GenerateMD5(md5password)
self.action = action
def GetReport(self):
'''
获取状态报告
:return:
'''
return self.OtherSendGet()
def GetMo(self):
'''
获取上行
:return:
'''
return self.OtherSendGet()
def GetBalance(self):
'''
获取余额
:return:
'''
return self.OtherSendGet()
def OtherSendGet(self):
requestUrl = self.Url + '/websms/smsJsonService'
requestParams = 'action={action}&userId={userId}&md5password={md5password}'.format(
action=self.action,
userId=self.userId,
md5password=self.md5password,
)
return self.SendGet(requestUrl, requestParams)
def ContentsToPhones(self, contentArr):
"""
包装多内容下发不同号码的函数
:param contentArr:
:return:字典类型
"""
requestUrl = self.Url + '/batchwebsms/smsJsonService'
ParamsDict = {'userId': self.userId, 'md5password': self.md5password,
'contentArr': json.dumps(contentArr)}
return self.SendPost(requestUrl, ParamsDict)
def ContentArrHandler(self, content, mobile, msgId=None, extCode=None):
'''
处理点对点的内容
:param content:短信内容
:param mobile:手机号
:param msgId:消息ID
:param extCode:扩展码
:return:字典类型
'''
dataDict = {
'content': content,
'mobile': mobile,
}
if msgId != None:
dataDict['msgId'] = msgId
if extCode != None:
dataDict['extCode'] = extCode
return dataDict
def GenerateMD5(self, password):
'''
生成MD5值
:param password:传输的明文
:return:
'''
md5Obj = hashlib.md5()
md5Obj.update(password.encode('UTF-8'))
return md5Obj.hexdigest()
def OneContentToPhones(self, content=None, mobile=None, msgId=None, extCode=None):
'''
单内容多号码批量发送,即群发
:param content:短信内容
:param mobile:手机号码
:param msgId:消息ID
:param extCode:扩展码
:return:发送的返回值
'''
requestUrl = self.Url + '/websms/smsJsonService'
if self.action and self.action == 'sendsms':
dataDict = {'action': self.action, 'userId': self.userId, 'md5password': self.md5password,
'content': content, 'mobile': mobile}
if msgId != None:
dataDict['msgId'] = msgId
if extCode != None:
dataDict['extCode'] = extCode
return self.SendPost(requestUrl, dataDict)
else:
print('缺少action参数,HttpMessage类实例化参数为:action=\'sendsms\'')
def isSSL(self, strData):
'''
判断是否是https的接口
:param strData:需要判断的URL地址
:return:
'''
context = None
if strData.startswith('https://'):
import ssl
context = ssl._create_unverified_context()
return context
def SendPost(self, sendUrl, Data):
'''
采用Post请求
:param sendUrl:接口地址
:param data:需要发送的数据包
:return:
'''
if Data != None:
paramsList = []
for paramsKey, sparamsValue in Data.items():
paramsList.append((paramsKey, sparamsValue))
sendBody = urllib.urlencode(paramsList)
reqObj = urllib2.Request(sendUrl)
reqObj.add_header('Content-Type', 'application/x-www-form-urlencoded')
cnameReq = urllib2.urlopen(reqObj, data=sendBody.encode('utf-8'), context=self.isSSL(sendUrl))
if cnameReq.code == 200:
return cnameReq.read().decode('utf-8')
else:
return 'Http Send Error Code %s' % cnameReq.status
else:
return 'Send RequestParams Body Is None'
def SendGet(self, sendUrl, Params):
'''
采用Get请求
:param sendUrl:
:param Params:
:return:
'''
cnameReq = urllib2.urlopen(sendUrl + '?' + Params, context=self.isSSL(sendUrl))
if cnameReq.code == 200:
return cnameReq.read().decode('utf-8')
else:
return 'Send Fail Error Code:%s' % cnameReq.status
if __name__ == '__main__':
# 请求的URL
Url = 'http://58.250.192.xxx:8088'
# 接口帐号
userId = 'xxxx'
# 接口密码
md5password = 'xxxx'
# 单内容多号码批量发送
# sendSmsObj = HttpMessage(Url, userId, md5password, action='sendsms')
# result = sendSmsObj.OneContentToPhones('【签名1】内容1', '188888888x1', extCode=None, msgId=None)
# print result
# 多内容打包发送
# sendSmsObj = HttpMessage(Url, userId, md5password)
# sendSmsList = []
# sendSmsList.append(sendSmsObj.ContentArrHandler('【签名1】内容1', '188888888x1'))
# sendSmsList.append(sendSmsObj.ContentArrHandler('【签名2】内容2', '188888888x2'))
# print sendSmsObj.ContentsToPhones(sendSmsList)
# 余额查询
# sendSmsObj = HttpMessage(Url, userId, md5password, action='getbalance')
# result = sendSmsObj.GetBalance()
# print result
# 获取短信状态反馈
# sendSmsObj = HttpMessage(Url, userId, md5password, action='getsendreport')
# result = sendSmsObj.GetReport()
# print result
# 获取短信上行
# sendSmsObj = HttpMessage(Url, userId, md5password, action='getdeliver')
# result = sendSmsObj.GetReport()
# print result