[backcolor=transparent]运行环境准备
用 HTTP 协议发送或者接收消息 ,请完成以下环境准备工作。
[backcolor=transparent]Windows
- 从 Python 官网(https://www.python.org/downloads/windows/) 下载并安装 Python 2.7。
打开 Windows 终端窗口(dos界面),输入 python 命令,检查 Python 是否安装成功, 如下图所示。
[backcolor=transparent]具体示例程序
您可以参考以下示例程序测试消息收发功能。
[backcolor=transparent]1.配置文件
您需要设置配置文件(user.properties)的相关内容,具体请参考申请 MQ 资源 。[list=1]- [backcolor=transparent][[backcolor=transparent]property[backcolor=transparent]]
- [backcolor=transparent]#您在控制台创建的Topic
- [backcolor=transparent]Topic[backcolor=transparent]=[backcolor=transparent]xxx
- [backcolor=transparent]#公测集群URL
- [backcolor=transparent]URL[backcolor=transparent]=[backcolor=transparent]http[backcolor=transparent]:[backcolor=transparent]//publictest-rest.ons.aliyun.com
- [backcolor=transparent]#阿里云官网身份验证访问码
- [backcolor=transparent]Ak[backcolor=transparent]=[backcolor=transparent]xxx
- [backcolor=transparent]#阿里云身份验证密钥
- [backcolor=transparent]Sk[backcolor=transparent]=[backcolor=transparent]xxx
- [backcolor=transparent]#MQ控制台创建的Producer ID
- [backcolor=transparent]ProducerID[backcolor=transparent]=[backcolor=transparent]xxx
- [backcolor=transparent]#MQ控制台创建的Consumer ID
- [backcolor=transparent]ConsumerID[backcolor=transparent]=[backcolor=transparent]xxx
说明:URL中的 Key,Tag 以及 POST Content-Type 没有任何的限制,只要确保 Key 和 Tag 相同唯一即可,可以放在 user.properties 里面。
[backcolor=transparent]2.发送消息示例程序
通过 HTTP 协议发送消息,请参考以下示例代码。
- [backcolor=transparent]#encoding:utf-8
- [backcolor=transparent]import[backcolor=transparent] [backcolor=transparent]ConfigParser
- [backcolor=transparent]import[backcolor=transparent] hashlib
- [backcolor=transparent]import[backcolor=transparent] httplib
- [backcolor=transparent]import[backcolor=transparent] time
- [backcolor=transparent]from[backcolor=transparent] urlparse [backcolor=transparent]import[backcolor=transparent] urlparse
- [backcolor=transparent]from[backcolor=transparent] [backcolor=transparent]Util[backcolor=transparent] [backcolor=transparent]import[backcolor=transparent] parseURL[backcolor=transparent],[backcolor=transparent]calSignature
- [backcolor=transparent]"""
- [backcolor=transparent]消息发布者
- [backcolor=transparent]"""
- [backcolor=transparent]class[backcolor=transparent] [backcolor=transparent]HttpProducer[backcolor=transparent]([backcolor=transparent]object[backcolor=transparent]):
- [backcolor=transparent] [backcolor=transparent]def[backcolor=transparent] __init__[backcolor=transparent]([backcolor=transparent]self[backcolor=transparent]):
- [backcolor=transparent] [backcolor=transparent]"""签名值"""
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]signature [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"Signature"
- [backcolor=transparent] [backcolor=transparent]"""ProducerID"""
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]producerid [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"ProducerID"
- [backcolor=transparent] [backcolor=transparent]"""消息主题"""
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]topic [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"Topic"
- [backcolor=transparent] [backcolor=transparent]"""访问码"""
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]ak [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"AccessKey"
- [backcolor=transparent] [backcolor=transparent]"""配置文件解析器"""
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]cf [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]ConfigParser[backcolor=transparent].[backcolor=transparent]ConfigParser[backcolor=transparent]()
- [backcolor=transparent] [backcolor=transparent]"""MD5对象"""
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]md5 [backcolor=transparent]=[backcolor=transparent] hashlib[backcolor=transparent].[backcolor=transparent]md5[backcolor=transparent]()
- [backcolor=transparent] [backcolor=transparent]"""
- [backcolor=transparent] 发布消息主流程
- [backcolor=transparent] """
- [backcolor=transparent] [backcolor=transparent]def[backcolor=transparent] process[backcolor=transparent]([backcolor=transparent]self[backcolor=transparent]):
- [backcolor=transparent] [backcolor=transparent]"""读取配置文件"""
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]cf[backcolor=transparent].[backcolor=transparent]read[backcolor=transparent]([backcolor=transparent]"user.properties"[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""读取消息主题"""
- [backcolor=transparent] topic [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]cf[backcolor=transparent].[backcolor=transparent]get[backcolor=transparent]([backcolor=transparent]"property"[backcolor=transparent],[backcolor=transparent]"Topic"[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""存储消息URL路径"""
- [backcolor=transparent] url [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]cf[backcolor=transparent].[backcolor=transparent]get[backcolor=transparent]([backcolor=transparent]"property"[backcolor=transparent],[backcolor=transparent]"URL"[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""访问码"""
- [backcolor=transparent] ak [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]cf[backcolor=transparent].[backcolor=transparent]get[backcolor=transparent]([backcolor=transparent]"property"[backcolor=transparent],[backcolor=transparent]"Ak"[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""密钥"""
- [backcolor=transparent] sk [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]cf[backcolor=transparent].[backcolor=transparent]get[backcolor=transparent]([backcolor=transparent]"property"[backcolor=transparent],[backcolor=transparent]"Sk"[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""Producer ID"""
- [backcolor=transparent] pid [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]cf[backcolor=transparent].[backcolor=transparent]get[backcolor=transparent]([backcolor=transparent]"property"[backcolor=transparent],[backcolor=transparent]"ProducerID"[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""HTTP请求主体内容"""
- [backcolor=transparent] content [backcolor=transparent]=[backcolor=transparent] U[backcolor=transparent]"中文"[backcolor=transparent].[backcolor=transparent]encode[backcolor=transparent]([backcolor=transparent]'utf-8'[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""分隔符"""
- [backcolor=transparent] newline [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"\n"
- [backcolor=transparent] [backcolor=transparent]"""获取URL域名地址"""
- [backcolor=transparent] urlname [backcolor=transparent]=[backcolor=transparent] urlparse[backcolor=transparent]([backcolor=transparent]url[backcolor=transparent]).[backcolor=transparent]hostname
- [backcolor=transparent] [backcolor=transparent]"""根据HTPP主体内容计算MD5值"""
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]md5[backcolor=transparent].[backcolor=transparent]update[backcolor=transparent]([backcolor=transparent]content[backcolor=transparent])
- [backcolor=transparent] contentmd5 [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]md5[backcolor=transparent].[backcolor=transparent]hexdigest[backcolor=transparent]()
- [backcolor=transparent] [backcolor=transparent]"""建立HTTP连接对象"""
- [backcolor=transparent] conn [backcolor=transparent]=[backcolor=transparent] httplib[backcolor=transparent].[backcolor=transparent]HTTPConnection[backcolor=transparent]([backcolor=transparent]parseURL[backcolor=transparent]([backcolor=transparent]urlname[backcolor=transparent]))
- [backcolor=transparent] [backcolor=transparent]try[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]for[backcolor=transparent] index [backcolor=transparent]in[backcolor=transparent] range[backcolor=transparent]([backcolor=transparent]0[backcolor=transparent],[backcolor=transparent]100[backcolor=transparent]):
- [backcolor=transparent] [backcolor=transparent]"""时间戳"""
- [backcolor=transparent] date [backcolor=transparent]=[backcolor=transparent] repr[backcolor=transparent]([backcolor=transparent]int[backcolor=transparent]([backcolor=transparent]time[backcolor=transparent].[backcolor=transparent]time[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]*[backcolor=transparent] [backcolor=transparent]1000[backcolor=transparent]))[[backcolor=transparent]0[backcolor=transparent]:[backcolor=transparent]13[backcolor=transparent]]
- [backcolor=transparent] [backcolor=transparent]"""构造签名字符串"""
- [backcolor=transparent] signString [backcolor=transparent]=[backcolor=transparent] str[backcolor=transparent]([backcolor=transparent]topic [backcolor=transparent]+[backcolor=transparent] newline [backcolor=transparent]+[backcolor=transparent] pid [backcolor=transparent]+[backcolor=transparent] newline [backcolor=transparent]+[backcolor=transparent] contentmd5 [backcolor=transparent]+[backcolor=transparent] newline [backcolor=transparent]+[backcolor=transparent] date[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""计算签名"""
- [backcolor=transparent] sign [backcolor=transparent]=[backcolor=transparent] calSignature[backcolor=transparent]([backcolor=transparent]signString[backcolor=transparent],[backcolor=transparent]sk[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""内容类型"""
- [backcolor=transparent] contentFlag [backcolor=transparent]=[backcolor=transparent]"Content-type"
- [backcolor=transparent] [backcolor=transparent]"""HTTP请求头部对象"""
- [backcolor=transparent] headers [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]signature [backcolor=transparent]:[backcolor=transparent] sign[backcolor=transparent],
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]ak [backcolor=transparent]:[backcolor=transparent] ak[backcolor=transparent],
- [backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]producerid [backcolor=transparent]:[backcolor=transparent] pid[backcolor=transparent],
- [backcolor=transparent] contentFlag [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"text/html;charset=UTF-8"
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]"""开始发送HTTP请求消息"""
- [backcolor=transparent] conn[backcolor=transparent].[backcolor=transparent]request[backcolor=transparent]([backcolor=transparent]method[backcolor=transparent]=[backcolor=transparent]"POST"[backcolor=transparent],[backcolor=transparent]url[backcolor=transparent]=[backcolor=transparent]url [backcolor=transparent]+[backcolor=transparent] [backcolor=transparent]"/message/?topic="[backcolor=transparent]+[backcolor=transparent]topic[backcolor=transparent]+[backcolor=transparent]"&time="[backcolor=transparent]+[backcolor=transparent]date[backcolor=transparent]+[backcolor=transparent]"&tag=http&key=http"[backcolor=transparent],
- [backcolor=transparent] body[backcolor=transparent]=[backcolor=transparent]content[backcolor=transparent],
- [backcolor=transparent] headers[backcolor=transparent]=[backcolor=transparent]headers[backcolor=transparent])
- [backcolor=transparent] [backcolor=transparent]"""获取HTTP应答消息"""
- [backcolor=transparent] response [backcolor=transparent]=[backcolor=transparent] conn[backcolor=transparent].[backcolor=transparent]getresponse[backcolor=transparent]()
- [backcolor=transparent] [backcolor=transparent]"""读取HTTP应答内容"""
- [backcolor=transparent] msg [backcolor=transparent]=[backcolor=transparent] response[backcolor=transparent].[backcolor=transparent]read[backcolor=transparent]()
- [backcolor=transparent] [backcolor=transparent]print[backcolor=transparent] [backcolor=transparent]"response:"[backcolor=transparent]+[backcolor=transparent]msg
- [backcolor=transparent] [backcolor=transparent]except[backcolor=transparent] [backcolor=transparent]Exception[backcolor=transparent],[backcolor=transparent]e[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]print[backcolor=transparent] e
- [backcolor=transparent] [backcolor=transparent]finally[backcolor=transparent]:
- [backcolor=transparent] conn[backcolor=transparent].[backcolor=transparent]close[backcolor=transparent]()
- [backcolor=transparent]"""流程入口"""
- [backcolor=transparent]if[backcolor=transparent] __name__ [backcolor=transparent]==[backcolor=transparent] [backcolor=transparent]'__main__'[backcolor=transparent]:
- [backcolor=transparent] [backcolor=transparent]"""创建消息发布者"""
- [backcolor=transparent] producer [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]HttpProducer[backcolor=transparent]()
- [backcolor=transparent] [backcolor=transparent]"""开启消息发布者"""
- [backcolor=transparent] producer[backcolor=transparent].[backcolor=transparent]process[backcolor=transparent]()