python大数据开发平台_python示例
### 结合使用 GET 和 Authorization 标头 (Python)
以下示例说明如何使用 [根据方案编号获取内容列表](http://open.gsdata.cn/article/info?id=1) API 发出请求。该请求发出 GET 请求,并使用 Authorization 标头将身份验证信息发送到 GSDATA。
~~~
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# GET 请求 的 gsdata 签名示例
# in the Authorization header.
import sys, os, base64, datetime, hashlib, hmac
import requests # pip install requests
# ************* 请求参数 *************
method = 'GET'
service = '/pubsent/v1/contents'
host = 'api.gsdata.cn'
request_parameters = 'media=0&order=desc&page=1&per-page=8&sid=92906&sortby=time'
# 签名密钥
def sign(key, msg):
return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest()
def getSignatureKey(key, dateStamp, serviceName):
kDate = sign(('GSDATA' + key).encode('utf-8'), dateStamp)
kService = sign(kDate, serviceName)
kSigning = sign(kService, 'gsdata_request')
return kSigning
# 开放平台中的应用信息
app_id = "***"
secret_key = "*******"
if app_id is None or secret_key is None:
print 'No access key is available.'
sys.exit()
# 创建时间信息
t = datetime.datetime.utcnow()
gsdate = t.strftime('%Y%m%dT%H%M%SZ')
datestamp = t.strftime('%Y%m%d') # Date w/o time, used in credential scope
# ************* TASK 1: 创建规范请求 *************
# Step 1 确认 HTTP 请求方法(GET、PUT、POST 等).
# Step 2: 创建规范URI——从域到查询的URI的一部分
canonical_uri = service
# Step 3: 创建规范查询字符串。在这个例子中 (a GET request),
# 按字符代码点以升序顺序对参数名称进行排序。例如,以大写字母 F 开头的参数名称排在以小写字母 b 开头的参数名称之前。
# 请勿对 RFC 3986 定义的任何非预留字符进行 URI 编码,这些字符包括:A-Z、a-z、0-9、连字符 (-)、下划线 (_)、句点 (.) 和波浪符 ( ~ )。
# 使用 %XY 对所有其他字符进行百分比编码,其中“X”和“Y”为十六进制字符(0-9 和大写字母 A-F)。例如,空格字符必须编码为 %20(不像某些编码方案那样使用“+”),扩展 UTF-8 字符必须采用格式 %XY%ZA%BC。
canonical_querystring = request_parameters
# Step 4: 添加规范标头.
# 规范标头包括您要包含在签名请求中的所有 HTTP 标头的列表
# 要创建规范标头列表,请将所有标头名称转换为小写形式并删除前导空格和尾随空格。将标头值中的连续空格转换为单个空格
# 追加小写标头名称,后跟冒号
# 追加该标头的值的逗号分隔列表。请勿对有多个值的标头进行值排序
canonical_headers = 'host:' + host + '\n' + 'x-gsdata-date:' + gsdate
# Step 5: 添加已签名的标头.
#该值是您包含在规范标头中的标头列表。通过添加此标头列表,您可以向 GSDATA 告知请求中的哪些标头是签名过程的一部分以及在验证请求时 GSDATA 可以忽略哪些标头
# host 标头必须作为已签名标头包括在内。如果包括日期或 x-gsdata-date 标头,则还必须包括在已签名标头列表中的标头。
# 要创建已签名标头列表,请将所有标头名称转换为小写形式,按字符代码对其进行排序,并使用分号来分隔这些标头名称。
signed_headers = 'host;x-gsdata-date'
# Step 6: 使用 SHA256 等哈希 (摘要) 函数以基于 HTTP 或 HTTPS 请求正文中的负载创建哈希值.
# 如果负载为空,则使用空字符串作为哈希函数的输入.
payload_hash = hashlib.sha256(''.encode("utf8")).hexdigest()
# Step 7: 要构建完整的规范请求,请将来自每个步骤的所有组成部分组合为单个字符串
canonical_request = method + '\n' + canonical_uri + '\n' + canonical_querystring + '\n' + canonical_headers + '\n' + signed_headers +'\n'+ payload_hash
print 'canonical_request: %s\n' % canonical_request
# ************* TASK 2: 创建要签名的字符串*************
# 以算法名称开头,后跟换行符。该值是您用于计算规范请求摘要的哈希[SHA256]
algorithm = 'GSDATA-HMAC-SHA256'
string_to_sign = algorithm + '\n' + gsdate + '\n' + hashlib.sha256(canonical_request.encode("utf8")).hexdigest()
# ************* TASK 3: 计算签名 *************
# 使用上面定义的函数创建签名密钥.
signing_key = getSignatureKey(secret_key, datestamp, service)
# Sign the string_to_sign using the signing_key
signature = hmac.new(signing_key, (string_to_sign).encode('utf-8'), hashlib.sha256).hexdigest()
# ************* TASK 4: 向请求添加签名信息 *************
# The signing information can be either in a query string value or in
# a header named Authorization. This code shows how to use a header.
# Create authorization header and add to request headers
authorization_header = algorithm + ' ' + 'AppKey=' + app_id + ', ' + 'SignedHeaders=' + signed_headers + ', ' + 'Signature=' + signature
# The request can include any headers, but MUST include "host", "x-gsdata-date",
# and (for this scenario) "Authorization". "host" and "x-gsdata-date" must
# be included in the canonical_headers and signed_headers, as noted
# earlier. Order here is not significant.
# Python note: The 'host' header is added automatically by the Python 'requests' library.
headers = {'x-gsdata-date':gsdate, 'Authorization':authorization_header}
# ************* SEND THE REQUEST *************
request_url = 'http://'+host+service + '?' + canonical_querystring
print '\nBEGIN REQUEST++++++++++++++++++++++++++++++++++++'
print 'Request URL = ' + request_url
r = requests.get(request_url, headers=headers)
print '\nRESPONSE++++++++++++++++++++++++++++++++++++'
print 'Response code: %d\n' % r.status_code
print r.text
~~~
python大数据开发平台_python示例相关推荐
- 贝壳一站式大数据开发平台实践
分享嘉宾:仰宗强 编辑整理:刘春龙 出品平台:DataFunTalk 导读:本次分享嘉宾是来自贝壳大数据部门的仰宗强,详细介绍了针对贝壳的业务数据与需求的增长,逐步升级数据开发平台的探索实践过程,包括 ...
- 集成开发环境-大数据开发平台的门户
什么是集成开发环境 这一篇,来谈一下大数据开发平台的门面,集成开发环境.什么是集成开发环境?顾名思义,就是IDE,哪个码农不知道IDE的,有胆你站出来! 不过IDE这个词也太普通了,在那些大厂玩大数据 ...
- 大数据开发平台-数据同步服务
什么是数据同步服务?顾名思义,就是在不同的系统之间同步数据.根据具体业务目的和应用场景的不同,各种数据同步服务框架的功能侧重点往往不尽相同,因而大家也会用各种大同小异的名称来称呼这类服务,比如数据传输 ...
- 从 Airflow 到 Apache DolphinScheduler,有赞大数据开发平台的调度系统演进
点击上方 蓝字关注我们 作者 | 宋哲琦 ✎ 编 者 按 在不久前的 Apache DolphinScheduler Meetup 2021 上,有赞大数据开发平台负责人 宋哲琦 带来了平台调度系统 ...
- 每日7千次的跨部门任务调度,有赞怎么设计大数据开发平台?
随着公司规模的增长,对大数据的离线应用开发的需求越来越多,这些需求包括但不限于离线数据同步(MySQL/Hive/Hbase/Elastic Search 等之间的离线同步).离线计算(Hive/Ma ...
- 开源大数据开发平台DataSphereStudioLinkis踩坑记录
Linkis:https://github.com/WeBankFinTech/Linkis DataSphereStudio:https://github.com/WeBankFinTech/Dat ...
- 微店大数据开发平台架构演进
一.为什么需要大数据开发平台 传统的数据开发流程 开发人员通过公共账号登录安装了Hive.Hadoop客户端的gateway机器: 编写自己的脚本,调试代码,完成后通过crontab配置脚本定时执行: ...
- 《微店大数据开发平台架构演进》阅读有感
<微店大数据开发平台架构演进>阅读有感 一.为什么需要大数据开发平台 微店在16年4月份之前,数据开发流程基本是这样的: 开发人员通过公共账号登录安装了Hive.Hadoop客户端的gat ...
- 《微店大数据开发平台架构演讲》读后感
微店很熟悉的一个词汇,微店在16年4月之前,数据开发流程和现在是有很多的差异的; 在16年4月前:数据的开发流程: 1.开发人员通过公共账号登录安装了Hive.Hadoop客户端的gateway机器: ...
最新文章
- Laravel 7发行说明
- nuget打包文件丢失如何使用powershell脚本解决
- matlab定子磁链观测器,一种基于二阶广义积分器的永磁同步电机定子磁链观测方法...
- 一个高效、快速、稳定的PHP日志扩展。
- Java使用UDP聊天程序
- 01.elasticsearch请求使用的基本语法
- Https环境下WS接口两次连续调用出错
- Python Base64模块的使用
- Java的native方法
- 关于程序员前途的看法和我系列文章的想法
- lync显示无法找到服务器,Lync 2013 已知问题
- microsoft html help workshop_云话科技 | 奥比中光Workshop技术研讨线上沙龙
- ubuntu管理开机启动项
- 工业交换机芯片选择需要注意什么事项呢?
- c语言定义函数return,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句。...
- 数风流人物,俱在今朝!|2019年度CSDN博客之星TOP10榜单揭晓
- Valine添加自定义表情
- 波士顿大学 计算机专业,波士顿大学本科计算机专业课程设置是怎样的?
- 级数ex展开_关于e和ex级数型展开式的规律分析_数学专业.doc
- php漏洞eval,Web安全之代码执行漏洞
热门文章
- MPLS ×××配置
- 李天平×××作诞生记——《亮剑.NET:.NET深入体验与实战精要》
- 2进制、8进制、10进制、16进制...各种进制间的轻松转换(c#)
- java treemap_Java TreeMap HigherKey()方法与示例
- Java LocalDate类| toString()方法与示例
- Java PipedOutputStream connect()方法与示例
- python元组为什么不可变_为什么python字符串和元组是不可变的?
- python怎么开发软件_怎么使用python进行软件开发
- linux文本运行层次,Linux基础知识之---文件系统层级结构
- oracle变量名,Oracle中的替换变量,变量名,变量名