【摘要】 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode

#!/usr/bin/python3
'''
功 能:对华为云常用API接口进行封装
版权信息: 华为技术有限公司,版权所有(C) 2018-2019
作 者:qshujun
修改记录:2018/02/28 v1.0
''' import os
import time
import json
from HttpRequest import HttpRequests class HWCloud(): def __init__(self, domain_name, username, password, region_id):
self.domain_name = domain_name
self.username = username
self.password = password
self.region_id = region_id
self.token_file = "token"
self.iam_endpoint = "https://iam.{region_id}.myhuaweicloud.com"
self.iam_token_uri = "/v3/auth/tokens"
self.smn_endpoint = "https://smn.{region_id}.myhuaweicloud.com"
self.sms_publish_uri = "/v2/{project_id}/notifications/sms"
self.headers = {"content-type": "application/json"}
self.project_id = ""
self.proxies = None
self.get_iam_token() def get_iam_token(self):
'''
以用户名、密码从IAN换取token并加入headers
:return:
'''
# 先尝试从本地文件读取尚在有效期内的token
if os.path.isfile(self.token_file):
try:
f = open(self.token_file)
token_str = f.read()
f.close()
token_info = json.loads(token_str)
if token_info["expires_at"] > time.time():
self.headers["X-Auth-Token"] = token_info["token"]
self.project_id = token_info["project_id"]
return True
except:
pass iam_token_url = self.iam_endpoint.format(region_id=self.region_id) + self.iam_token_uri
data = {
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"name": self.username,
"password": self.password,
"domain": {
"name": self.domain_name
}
}
}
},
"scope": {
"project": {
"name": self.region_id
}
}
}
}
auth_timestamp = time.time()
req = HttpRequests(iam_token_url, data=json.dumps(data), type="POST", headers = self.headers, proxies=self.proxies)
print(req.get_text())
if req.get_code() == 201 and "X-Subject-Token" in req.get_headers():
self.headers["X-Auth-Token"] = req.get_headers()["X-Subject-Token"]
req_text = json.loads(req.get_text())
self.project_id = req_text["token"]["project"]["id"]
issued_at = req_text["token"]["issued_at"]
expires_at = req_text["token"]["expires_at"]
expires_timestamp = auth_timestamp + time.mktime(time.strptime(expires_at, "%Y-%m-%dT%H:%M:%S.%fZ")) - time.mktime(time.strptime(issued_at, "%Y-%m-%dT%H:%M:%S.%fZ"))
token_info = {
"token": req.get_headers()["X-Subject-Token"],
"project_id": self.project_id,
"expires_at": expires_timestamp
}
f = open(self.token_file,'w')
f.write(json.dumps(token_info))
f.close()
return True
else:
print("Get IAM token failed, http code: % s, % s" % (str(req.get_code()), req.get_text()))
return False def sendSms(self, sign_id, endpoint, message):
'''
:param sign_id: 短信签名
:param endpoint: 手机号码
:param message: 短信消息
:return:
'''
sms_publish_url = self.smn_endpoint.format(region_id=self.region_id) + self.sms_publish_uri.format(project_id=self.project_id)
data = {
"endpoint": endpoint,
"message": message,
"sign_id": sign_id
}
req = HttpRequests(sms_publish_url, data=json.dumps(data), type="POST", headers=self.headers, proxies=self.proxies)
if req.get_code() == 200:
return True
else:
print("Send SMS failed, http code: % s, % s" % (str(req.get_code()), req.get_text()))
return False if __name__ == '__main__':
client = HWCloud('domain_name','username','Password','cn-north-1')
client.sendSms('dddabcde*********************66','181xxxxx110','hello')

依赖的外部HttpRequests类

#!/usr/bin/python
# coding: utf-8 import requests class HttpRequests():
'''
对requests库封装的GET、POST、PUT等方法调用类
''' def __init__(self, url, data=None, type='GET', cookie=None, headers=None, proxies=None):
self.url = url
self.data = data
self.type = type
self.cookie = cookie
self.headers = headers
self.proxies = proxies
self.send_request() def send_request(self):
'''
setup a request
''' if self.url == None or self.url == '':
raise 'The url should not empty!'
if self.type == 'POST':
self.req = requests.post(self.url, data=self.data, headers=self.headers, proxies=self.proxies)
elif self.type == 'GET':
if self.data == None:
self.req = requests.get(self.url, headers=self.headers, proxies=self.proxies)
else:
self.req = requests.get(self.url, params=self.data, headers=self.headers, proxies=self.proxies)
elif self.type == 'PUT':
self.req = requests.put(self.url, data=self.data, headers=self.headers, proxies=self.proxies)
else:
self.req = None
raise 'The http request type NOT support now!' def get_code(self):
try:
return self.req.status_code
except:
raise 'get code fail' def get_url(self):
try:
return self.req.url
except:
raise 'get url fail' def get_text(self):
try:
return self.req.text
except:
raise 'get text fail' def get_headers(self):
try:
return self.req.headers
except:
raise 'get headers fail' def get_cookie(self):
headers = self.get_headers()
if 'set-cookie' in headers:
return headers['set-cookie']
else:
return None

来源:华为云社区  作者:qshujun

用Python调用华为云API接口发短信的更多相关文章

  1. #PHP# 华为云 API 方式发送短信

    使用给华为云 消息 服务 API 方式发送短信 代码来自华为云,已通过测试 <?php /** * 华为云发送短信示例代码 * 本段代码需要使用自己的配置信息才能正常运行,出配置信息外,不需要改 ...

  2. 谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信

    前言 之前发过一篇文章,用 Python 制作的给父母天气预报提醒的小工具天气变冷了,给父母制作一个天气提醒小助手,这篇文章我同步到博客上之后,有读者在评论区留言,对于部分微信没有网页版接口,导致无法 ...

  3. 利用阿里大于接口发短信(Delphi版)

    阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信.语音.流量直充.私密专线.店铺手机号等个性化服务.每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到.官方文档提供 ...

  4. Python 调用阿里云 API 收集 ECS 数据

    #!/usr/bin/env python # coding: utf-8 # author: Wang XiaoQiang ''' 功能介绍: 1.调用阿里云API,收集所有区域 ECS 信息 2. ...

  5. PHP控制阿里云短信API接口实现短信群发功能

    阿里云短信支持先使用后支付的原则,价格为4分半1条. 通过SDK可以与网站功能的绑定,实现响应的短信发送功能 现已统一合并升级为:消息服务. 消息服务 阿里云消息服务(Message Service, ...

  6. ios-王云鹤 调用ios系统功能---------------打电话、发短信、发邮件

    --------------------------------------菜鸟总结,欢迎读者雅正------------------------------------------------- 先 ...

  7. 用那啥 那啥来着Django来发送Email,结合腾讯云,批量发短信给用户!

    你们好,我是来ZB的! 这篇博客是用来发送邮件的,用的是Django框架,很好用.遗憾的是我当时用的阿里云,把腾讯QQ的端口给……给屏蔽了,啊啊啊啊,多么痛的领悟呀.后来用的163网易的邮箱.可以了! ...

  8. 注册登录页面修订-Python使用redis-手机验证接口-发送短信验证

    登录页面修订 views.Login.vue <template> <div class="login box"> <img src="@/ ...

  9. 使用飞信api接口实现短信发送(只能发送好友)

    找了很久才找到一个能用的飞信API接口(http://quanapi.sinaapp.com/fetion.php?u=飞信登录手机号&p=飞信登录密码&to=接收飞信的手机号& ...

随机推荐

  1. 测试面试题集-测试用例设计:登录、购物车、QQ收藏表情、转账、充值、提现

    以下内容首发于微信公众号[ITester软件测试小栈]: 测试面试题集-2.测试用例设计 大家好 我是coco小锦鲤 上周五给大家分享了测试基础理论题 这个周五给大家分享测试用例设计题 测试用例的考察 ...

  2. go xml 序列化

    /** 序列化 */ package main import ( "encoding/xml" "fmt" ) // Person 结构 type Person ...

  3. java VS c#,异同点

    因工作安排,后期需要维护一个java项目.所以稍微熟悉下java,开此篇记录下java与c#的区别点,方便增强自己学习效果.肯定是不全的,可能是有错的,欢迎批评指正. 一.关键字 描述 C# Java ...

  4. 结合参数接收响应转换原理讲解SpringBoot常用注解

    一.常用注解回顾 1.1 @RequestBody与@ResponseBody //注意并不要求@RequestBody与@ResponseBody成对使用. public @ResponseBody ...

  5. T-SQL Part V: Locks

    写SQL最常见的问题就是Dead Lock了.本篇简单介绍入门级别的Lock使用和排查. 首先来看MSDN上的官方文档(https://technet.microsoft.com/en-us/libr ...

  6. My First Cloud Application's Design

    Structure Diagram as following: Questions list: 1. Skydrive Integration > Based on the MSDN commu ...

  7. CSS复合选择器是什么?复合选择器是如何工作

    复合选择器介绍 复合选择器其实很好理解,说白了就跟我们生活中的有血缘关系家庭成员一样,通过标签或者class属性或id属性,去找对应的有血缘关系的某个选择器,具体的大家往下看哦. 如果是初学者对基本的 ...

  8. flume安装和介绍

    一.安装1.flume-ng-1.5.0-cdh5.3.6.tar.gz 下载链接:https://pan.baidu.com/s/1AWPGP2qnY6_VpYr_iSnJ3w 密码:tiog2.对 ...

  9. mui 底部导航栏的实现

    mui 底部导航栏的实现 <nav class="mui-bar mui-bar-tab"> <a id="display" class=&q ...

  10. Bootstrap——导航条(navbar)

    导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多. 导航条(navbar)中有一个背景色.而且导航条可以是纯链接(类似导航).表单以及表单和导航一起结合等多种形式. 在制作一个基 ...