开发者社区> 问答> 正文

使用HTTP 接入Python 收发消息如何实现?(1)


[backcolor=transparent]运行环境准备
用 HTTP 协议发送或者接收消息 ,请完成以下环境准备工作。
[backcolor=transparent]Windows

  1. 从 Python 官网(https://www.python.org/downloads/windows/) 下载并安装 Python 2.7。

  2. 打开 Windows 终端窗口(dos界面),输入 python 命令,检查 Python 是否安装成功, 如下图所示。

    [backcolor=transparent]具体示例程序
    您可以参考以下示例程序测试消息收发功能。
    [backcolor=transparent]1.配置文件
    您需要设置配置文件(user.properties)的相关内容,具体请参考申请 MQ 资源 。[list=1]
  3. [backcolor=transparent][[backcolor=transparent]property[backcolor=transparent]]
  4. [backcolor=transparent]#您在控制台创建的Topic
  5. [backcolor=transparent]Topic[backcolor=transparent]=[backcolor=transparent]xxx
  6. [backcolor=transparent]#公测集群URL
  7. [backcolor=transparent]URL[backcolor=transparent]=[backcolor=transparent]http[backcolor=transparent]:[backcolor=transparent]//publictest-rest.ons.aliyun.com
  8. [backcolor=transparent]#阿里云官网身份验证访问码
  9. [backcolor=transparent]Ak[backcolor=transparent]=[backcolor=transparent]xxx
  10. [backcolor=transparent]#阿里云身份验证密钥
  11. [backcolor=transparent]Sk[backcolor=transparent]=[backcolor=transparent]xxx
  12. [backcolor=transparent]#MQ控制台创建的Producer ID
  13. [backcolor=transparent]ProducerID[backcolor=transparent]=[backcolor=transparent]xxx
  14. [backcolor=transparent]#MQ控制台创建的Consumer ID
  15. [backcolor=transparent]ConsumerID[backcolor=transparent]=[backcolor=transparent]xxx

说明:URL中的 Key,Tag 以及 POST Content-Type 没有任何的限制,只要确保 Key 和 Tag 相同唯一即可,可以放在 user.properties 里面。
[backcolor=transparent]2.发送消息示例程序
通过 HTTP 协议发送消息,请参考以下示例代码。
  1. [backcolor=transparent]#encoding:utf-8
  2. [backcolor=transparent]import[backcolor=transparent] [backcolor=transparent]ConfigParser
  3. [backcolor=transparent]import[backcolor=transparent] hashlib
  4. [backcolor=transparent]import[backcolor=transparent] httplib
  5. [backcolor=transparent]import[backcolor=transparent] time
  6. [backcolor=transparent]from[backcolor=transparent] urlparse [backcolor=transparent]import[backcolor=transparent] urlparse
  7. [backcolor=transparent]from[backcolor=transparent] [backcolor=transparent]Util[backcolor=transparent] [backcolor=transparent]import[backcolor=transparent] parseURL[backcolor=transparent],[backcolor=transparent]calSignature
  8. [backcolor=transparent]"""
  9. [backcolor=transparent]消息发布者
  10. [backcolor=transparent]"""
  11. [backcolor=transparent]class[backcolor=transparent] [backcolor=transparent]HttpProducer[backcolor=transparent]([backcolor=transparent]object[backcolor=transparent]):
  12. [backcolor=transparent]    [backcolor=transparent]def[backcolor=transparent] __init__[backcolor=transparent]([backcolor=transparent]self[backcolor=transparent]):
  13. [backcolor=transparent]        [backcolor=transparent]"""签名值"""
  14. [backcolor=transparent]        [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]signature [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"Signature"
  15. [backcolor=transparent]        [backcolor=transparent]"""ProducerID"""
  16. [backcolor=transparent]        [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]producerid [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"ProducerID"
  17. [backcolor=transparent]        [backcolor=transparent]"""消息主题"""
  18. [backcolor=transparent]        [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]topic [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"Topic"
  19. [backcolor=transparent]        [backcolor=transparent]"""访问码"""
  20. [backcolor=transparent]        [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]ak [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"AccessKey"
  21. [backcolor=transparent]        [backcolor=transparent]"""配置文件解析器"""
  22. [backcolor=transparent]        [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]cf [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]ConfigParser[backcolor=transparent].[backcolor=transparent]ConfigParser[backcolor=transparent]()
  23. [backcolor=transparent]        [backcolor=transparent]"""MD5对象"""
  24. [backcolor=transparent]        [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]md5 [backcolor=transparent]=[backcolor=transparent] hashlib[backcolor=transparent].[backcolor=transparent]md5[backcolor=transparent]()
  25. [backcolor=transparent]    [backcolor=transparent]"""
  26. [backcolor=transparent]    发布消息主流程
  27. [backcolor=transparent]    """
  28. [backcolor=transparent]    [backcolor=transparent]def[backcolor=transparent] process[backcolor=transparent]([backcolor=transparent]self[backcolor=transparent]):
  29. [backcolor=transparent]        [backcolor=transparent]"""读取配置文件"""
  30. [backcolor=transparent]        [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]cf[backcolor=transparent].[backcolor=transparent]read[backcolor=transparent]([backcolor=transparent]"user.properties"[backcolor=transparent])
  31. [backcolor=transparent]        [backcolor=transparent]"""读取消息主题"""
  32. [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])
  33. [backcolor=transparent]        [backcolor=transparent]"""存储消息URL路径"""
  34. [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])
  35. [backcolor=transparent]        [backcolor=transparent]"""访问码"""
  36. [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])
  37. [backcolor=transparent]        [backcolor=transparent]"""密钥"""
  38. [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])
  39. [backcolor=transparent]        [backcolor=transparent]"""Producer ID"""
  40. [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])
  41. [backcolor=transparent]        [backcolor=transparent]"""HTTP请求主体内容"""
  42. [backcolor=transparent]        content [backcolor=transparent]=[backcolor=transparent] U[backcolor=transparent]"中文"[backcolor=transparent].[backcolor=transparent]encode[backcolor=transparent]([backcolor=transparent]'utf-8'[backcolor=transparent])
  43. [backcolor=transparent]        [backcolor=transparent]"""分隔符"""
  44. [backcolor=transparent]        newline [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]"\n"
  45. [backcolor=transparent]        [backcolor=transparent]"""获取URL域名地址"""
  46. [backcolor=transparent]        urlname [backcolor=transparent]=[backcolor=transparent] urlparse[backcolor=transparent]([backcolor=transparent]url[backcolor=transparent]).[backcolor=transparent]hostname
  47. [backcolor=transparent]        [backcolor=transparent]"""根据HTPP主体内容计算MD5值"""
  48. [backcolor=transparent]        [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]md5[backcolor=transparent].[backcolor=transparent]update[backcolor=transparent]([backcolor=transparent]content[backcolor=transparent])
  49. [backcolor=transparent]        contentmd5 [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]md5[backcolor=transparent].[backcolor=transparent]hexdigest[backcolor=transparent]()
  50. [backcolor=transparent]        [backcolor=transparent]"""建立HTTP连接对象"""
  51. [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]))
  52. [backcolor=transparent]        [backcolor=transparent]try[backcolor=transparent]:
  53. [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]):
  54. [backcolor=transparent]                [backcolor=transparent]"""时间戳"""
  55. [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]]
  56. [backcolor=transparent]                [backcolor=transparent]"""构造签名字符串"""
  57. [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])
  58. [backcolor=transparent]                [backcolor=transparent]"""计算签名"""
  59. [backcolor=transparent]                sign [backcolor=transparent]=[backcolor=transparent] calSignature[backcolor=transparent]([backcolor=transparent]signString[backcolor=transparent],[backcolor=transparent]sk[backcolor=transparent])
  60. [backcolor=transparent]                [backcolor=transparent]"""内容类型"""
  61. [backcolor=transparent]                contentFlag [backcolor=transparent]=[backcolor=transparent]"Content-type"
  62. [backcolor=transparent]                [backcolor=transparent]"""HTTP请求头部对象"""
  63. [backcolor=transparent]                headers [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]{
  64. [backcolor=transparent]                    [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]signature [backcolor=transparent]:[backcolor=transparent] sign[backcolor=transparent],
  65. [backcolor=transparent]                    [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]ak [backcolor=transparent]:[backcolor=transparent] ak[backcolor=transparent],
  66. [backcolor=transparent]                    [backcolor=transparent]self[backcolor=transparent].[backcolor=transparent]producerid [backcolor=transparent]:[backcolor=transparent] pid[backcolor=transparent],
  67. [backcolor=transparent]                    contentFlag [backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]"text/html;charset=UTF-8"
  68. [backcolor=transparent]            [backcolor=transparent]}
  69. [backcolor=transparent]                [backcolor=transparent]"""开始发送HTTP请求消息"""
  70. [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],
  71. [backcolor=transparent]                             body[backcolor=transparent]=[backcolor=transparent]content[backcolor=transparent],
  72. [backcolor=transparent]                             headers[backcolor=transparent]=[backcolor=transparent]headers[backcolor=transparent])
  73. [backcolor=transparent]                [backcolor=transparent]"""获取HTTP应答消息"""
  74. [backcolor=transparent]                response [backcolor=transparent]=[backcolor=transparent] conn[backcolor=transparent].[backcolor=transparent]getresponse[backcolor=transparent]()
  75. [backcolor=transparent]                [backcolor=transparent]"""读取HTTP应答内容"""
  76. [backcolor=transparent]                msg [backcolor=transparent]=[backcolor=transparent] response[backcolor=transparent].[backcolor=transparent]read[backcolor=transparent]()
  77. [backcolor=transparent]                [backcolor=transparent]print[backcolor=transparent] [backcolor=transparent]"response:"[backcolor=transparent]+[backcolor=transparent]msg
  78. [backcolor=transparent]        [backcolor=transparent]except[backcolor=transparent] [backcolor=transparent]Exception[backcolor=transparent],[backcolor=transparent]e[backcolor=transparent]:
  79. [backcolor=transparent]            [backcolor=transparent]print[backcolor=transparent] e
  80. [backcolor=transparent]        [backcolor=transparent]finally[backcolor=transparent]:
  81. [backcolor=transparent]            conn[backcolor=transparent].[backcolor=transparent]close[backcolor=transparent]()
  82. [backcolor=transparent]"""流程入口"""
  83. [backcolor=transparent]if[backcolor=transparent] __name__ [backcolor=transparent]==[backcolor=transparent] [backcolor=transparent]'__main__'[backcolor=transparent]:
  84. [backcolor=transparent]    [backcolor=transparent]"""创建消息发布者"""
  85. [backcolor=transparent]    producer [backcolor=transparent]=[backcolor=transparent] [backcolor=transparent]HttpProducer[backcolor=transparent]()
  86. [backcolor=transparent]    [backcolor=transparent]"""开启消息发布者"""
  87. [backcolor=transparent]    producer[backcolor=transparent].[backcolor=transparent]process[backcolor=transparent]()

展开
收起
猫饭先生 2017-10-27 10:21:06 1774 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载