阿里云SMS发短信python3代码
来源:互联网 发布:国画淘宝梅花挂客厅 编辑:程序博客网 时间:2024/09/21 10:58
#!/usr/bin/env python
#coding: utf-8
import sys,os
import urllib.request, urllib.parse, urllib.error,urllib.request,urllib.error,urllib.parse
import base64
import hmac
import hashlib
from hashlib import sha1
import time
import uuid
import json
import ssl
access_key_id = 'ACCESSKEYID';
access_key_secret = 'ACCESSKEYSECRET';
server_address = 'https://sms.aliyuncs.com'
#定义参数
user_params = {'Action': 'SingleSendSms', 'ParamString': '{"code":"1111","product":"PRODUCTNAME"}', 'RecNum': 'PHONENUMBER','SignName': 'SIGNNAME','TemplateCode': 'ETMPLATECODE' }
def percent_encode(encodeStr):
encodeStr = str(encodeStr)
res = urllib.parse.quote(encodeStr.encode('utf8'), '')
res = res.replace('+', '%20')
res = res.replace('*', '%2A')
res = res.replace('%7E', '~')
return res
def compute_signature(parameters, access_key_secret):
sortedParameters = sorted(list(parameters.items()), key=lambda parameters: parameters[0])
canonicalizedQueryString = ''
for (k,v) in sortedParameters:
canonicalizedQueryString += '&' + percent_encode(k) + '=' + percent_encode(v)
stringToSign = 'GET&%2F&' + percent_encode(canonicalizedQueryString[1:])
print("stringToSign: "+stringToSign)
h = hmac.new((access_key_secret+'&').encode(encoding="utf-8"), stringToSign.encode('utf-8'), sha1)
signature = base64.encodestring(h.digest()).strip()
return signature
def compose_url(user_params):
timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(time.time()))
parameters = { \
'Format' : 'JSON', \
'Version' : '2016-09-27', \
'AccessKeyId' : access_key_id, \
'SignatureVersion' : '1.0', \
'SignatureMethod' : 'HMAC-SHA1', \
'SignatureNonce' : str(uuid.uuid1()), \
'RegionId': 'cn-hangzhou',
'Timestamp' : timestamp\
}
for key in list(user_params.keys()):
parameters[key] = user_params[key]
signature = compute_signature(parameters, access_key_secret)
parameters['Signature'] = signature
url = server_address + "/?" + urllib.parse.urlencode(parameters)
return url
def make_request(user_params, quiet=False):
url = compose_url(user_params)
request = urllib.request.Request(url)
try:
context = ssl._create_unverified_context()
conn = urllib.request.urlopen(request, context=context)
response = conn.read().decode('utf-8')
except urllib.error.HTTPError as e:
print((e.read().strip()))
raise SystemExit(e)
try:
obj = json.loads(response)
if quiet:
return obj
except ValueError as e:
raise SystemExit(e)
json.dump(obj, sys.stdout, sort_keys=True, indent=2)
sys.stdout.write('\n')
print(sys.stdin.encoding)
make_request(user_params)
#coding: utf-8
import sys,os
import urllib.request, urllib.parse, urllib.error,urllib.request,urllib.error,urllib.parse
import base64
import hmac
import hashlib
from hashlib import sha1
import time
import uuid
import json
import ssl
access_key_id = 'ACCESSKEYID';
access_key_secret = 'ACCESSKEYSECRET';
server_address = 'https://sms.aliyuncs.com'
#定义参数
user_params = {'Action': 'SingleSendSms', 'ParamString': '{"code":"1111","product":"PRODUCTNAME"}', 'RecNum': 'PHONENUMBER','SignName': 'SIGNNAME','TemplateCode': 'ETMPLATECODE' }
def percent_encode(encodeStr):
encodeStr = str(encodeStr)
res = urllib.parse.quote(encodeStr.encode('utf8'), '')
res = res.replace('+', '%20')
res = res.replace('*', '%2A')
res = res.replace('%7E', '~')
return res
def compute_signature(parameters, access_key_secret):
sortedParameters = sorted(list(parameters.items()), key=lambda parameters: parameters[0])
canonicalizedQueryString = ''
for (k,v) in sortedParameters:
canonicalizedQueryString += '&' + percent_encode(k) + '=' + percent_encode(v)
stringToSign = 'GET&%2F&' + percent_encode(canonicalizedQueryString[1:])
print("stringToSign: "+stringToSign)
h = hmac.new((access_key_secret+'&').encode(encoding="utf-8"), stringToSign.encode('utf-8'), sha1)
signature = base64.encodestring(h.digest()).strip()
return signature
def compose_url(user_params):
timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(time.time()))
parameters = { \
'Format' : 'JSON', \
'Version' : '2016-09-27', \
'AccessKeyId' : access_key_id, \
'SignatureVersion' : '1.0', \
'SignatureMethod' : 'HMAC-SHA1', \
'SignatureNonce' : str(uuid.uuid1()), \
'RegionId': 'cn-hangzhou',
'Timestamp' : timestamp\
}
for key in list(user_params.keys()):
parameters[key] = user_params[key]
signature = compute_signature(parameters, access_key_secret)
parameters['Signature'] = signature
url = server_address + "/?" + urllib.parse.urlencode(parameters)
return url
def make_request(user_params, quiet=False):
url = compose_url(user_params)
request = urllib.request.Request(url)
try:
context = ssl._create_unverified_context()
conn = urllib.request.urlopen(request, context=context)
response = conn.read().decode('utf-8')
except urllib.error.HTTPError as e:
print((e.read().strip()))
raise SystemExit(e)
try:
obj = json.loads(response)
if quiet:
return obj
except ValueError as e:
raise SystemExit(e)
json.dump(obj, sys.stdout, sort_keys=True, indent=2)
sys.stdout.write('\n')
print(sys.stdin.encoding)
make_request(user_params)
0 0
- 阿里云SMS发短信python3代码
- SMS平台发短信的代码
- ThinkPHP5 集成阿里云SMS短信服务--验证码发送
- Thinkphp5+阿里云SMS短信服务发送验证码
- python3 阿里云短信发送Demo
- 向虚拟机发短信(android SMS 调试)
- 向虚拟机发短信(android SMS 调试)
- 向虚拟机发短信(android SMS 调试)
- Java调用 SMS Cat发短信
- laravel5.4使用Laravel Sms和阿里云短信服务实现短信验证码功能
- PB9阿里大于发短信
- Java通过SMS短信平台实现发短信功能
- Java通过SMS短信平台实现发短信功能
- Java通过SMS短信平台实现发短信功能
- Java通过SMS短信平台实现发短信功能
- Java通过SMS短信平台实现发短信功能
- Java通过SMS短信平台实现发短信功能
- Java通过SMS短信平台实现发短信功能
- 如何在Windows下像Mac一样优雅开发?
- 设计模式之组合模式
- 【LeetCode】53.Maximum Subarray最大连续子序列和
- 个人的中小型项目前端架构浅谈
- iOS Runtime(一)
- 阿里云SMS发短信python3代码
- [leetCode刷题笔记]516. Longest Palindromic Subsequence
- hdu4727-(The Number Off of FFF)
- 保障MySQL安全的十四个最佳方法
- 一. Scala安装与环境配置
- 位运算符 和MySQL运算符的优先级
- maven build 无反应,直接terminated
- Junit4-使用JUnit4
- BadVPN详解之--题外话:我之前自研的一个设计