📜  curl 发送短信 (1)

📅  最后修改于: 2023-12-03 14:40:24.068000             🧑  作者: Mango

用Curl发送短信

Curl 是一个非常强大的命令行工具,可以用来与各种网络资源交互,其中就包括发送短信。在本文中,我们将介绍如何使用 Curl 来发送短信,以及一些常见的用例。

准备工作

在使用 Curl 发送短信之前,我们需要获取一些信息:

  • 短信平台的 API 地址
  • 短信平台的账号(可以是手机号)
  • 短信平台的 API 密钥

在本文中,我们以 阿里云短信服务 为例进行介绍。如果您使用的是其他的短信平台,请参考对应平台的文档,获取相应的信息。

发送短信

要发送短信,我们可以用 Curl 发送 HTTP POST 请求。具体方法如下:

curl -X POST --data-urlencode "参数1=值1&参数2=值2" "https://短信平台API地址"

其中,参数1、参数2 等表示短信平台所需的参数;值1、值2 等则填写对应的值。具体的参数和值,请参考短信平台文档。

在阿里云短信服务中,要发送短信,我们需要提供以下参数:

  • Action=SendSms 表示执行发送短信操作
  • PhoneNumbers=手机号码 表示要发送的手机号码
  • SignName=短信签名 表示短信签名,需要在阿里云短信服务中先创建
  • TemplateCode=短信模板ID 表示短信模板 ID,需要在阿里云短信服务中先创建
  • TemplateParam={"code":"验证码"} 表示短信模板的参数,需要根据短信模板的实际需求而定

具体的 Curl 命令如下:

curl -X POST --data-urlencode "Action=SendSms&PhoneNumbers=手机号码&SignName=短信签名&TemplateCode=短信模板ID&TemplateParam={\"code\":\"验证码\"}" "https://dysmsapi.aliyuncs.com/?RegionId=cn-hangzhou&AccessKeyId=您的AccessKeyId&Format=json&SignatureMethod=HMAC-SHA1&SignatureNonce=随机数&SignatureVersion=1.0&Timestamp=ISO8601时间&Signature=签名字符串"

其中,AccessKeyId、SignatureNonce、SignatureVersion、Timestamp 这些参数需要按照阿里云短信服务的要求设置。而 Signature 则需要使用 HMAC-SHA1 签名算法,对请求进行签名。

Curl 发送短信的示例代码

下面是用 Curl 发送短信的一个简单示例代码,仅供参考:

#!/bin/bash

PHONE_NUMBER="手机号码"
SIGN_NAME="短信签名"
TEMPLATE_CODE="短信模板ID"
TEMPLATE_PARAM="{\"code\":\"验证码\"}"
ACCESS_KEY_ID="您的AccessKeyId"
ACCESS_SECRET="您的AccessSecret"

# 生成随机数和时间戳
RANDOM=$(date +%s%N)
NOW=$(date -u "+%Y-%m-%dT%H:%M:%SZ")

# 组装签名字符串
STRING_TO_SIGN="POST\n&\napplication/x-www-form-urlencoded\n&"
STRING_TO_SIGN+="Action%3DSendSms"
STRING_TO_SIGN+="&Format%3Djson"
STRING_TO_SIGN+="&PhoneNumbers%3D${PHONE_NUMBER}"
STRING_TO_SIGN+="&RegionId%3Dcn-hangzhou"
STRING_TO_SIGN+="&SignName%3D${SIGN_NAME}"
STRING_TO_SIGN+="&SignatureMethod%3DHMAC-SHA1"
STRING_TO_SIGN+="&SignatureNonce%3D${RANDOM}"
STRING_TO_SIGN+="&SignatureVersion%3D1.0"
STRING_TO_SIGN+="&TemplateCode%3D${TEMPLATE_CODE}"
STRING_TO_SIGN+="&TemplateParam%3D${TEMPLATE_PARAM}"
STRING_TO_SIGN+="&Timestamp%3D${NOW}"
BASE64_ENCODED_STRING_TO_SIGN=$(echo -n "${STRING_TO_SIGN}" | openssl dgst -binary -sha1 -hmac "${ACCESS_SECRET}&" | base64)
URL_ENCODED_STRING_TO_SIGN=$(echo -n "${BASE64_ENCODED_STRING_TO_SIGN}" | sed 's/+/%2B/g' | sed 's/\//%2F/g' | sed 's/=/%3D/g')

# 发送短信
curl -s -X POST --data-urlencode "Action=SendSms&PhoneNumbers=${PHONE_NUMBER}&SignName=${SIGN_NAME}&TemplateCode=${TEMPLATE_CODE}&TemplateParam=${TEMPLATE_PARAM}" "https://dysmsapi.aliyuncs.com/?RegionId=cn-hangzhou&AccessKeyId=${ACCESS_KEY_ID}&Format=json&SignatureMethod=HMAC-SHA1&SignatureNonce=${RANDOM}&SignatureVersion=1.0&Timestamp=${NOW}&Signature=${URL_ENCODED_STRING_TO_SIGN}" | jq .

在这个代码片段中,我们使用了 openssl 工具来生成 HMAC-SHA1 签名,并使用了 base64 编码。我们还使用了 sed 来进行 URL 编码。

另外,我们使用了 jq 来进行 JSON 格式化和打印。如果您还没有安装 jq,请使用以下命令安装:

sudo apt-get install jq
总结

在本文中,我们通过介绍阿里云短信服务为例,讲解了如何使用 Curl 发送短信。相信读者们已经掌握了这一技能,并且也可以应用到自己的项目中。如果您有任何疑问或建议,请及时反馈,谢谢!