### 结合使用 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示例相关推荐

  1. 贝壳一站式大数据开发平台实践

    分享嘉宾:仰宗强 编辑整理:刘春龙 出品平台:DataFunTalk 导读:本次分享嘉宾是来自贝壳大数据部门的仰宗强,详细介绍了针对贝壳的业务数据与需求的增长,逐步升级数据开发平台的探索实践过程,包括 ...

  2. 集成开发环境-大数据开发平台的门户

    什么是集成开发环境 这一篇,来谈一下大数据开发平台的门面,集成开发环境.什么是集成开发环境?顾名思义,就是IDE,哪个码农不知道IDE的,有胆你站出来! 不过IDE这个词也太普通了,在那些大厂玩大数据 ...

  3. 大数据开发平台-数据同步服务

    什么是数据同步服务?顾名思义,就是在不同的系统之间同步数据.根据具体业务目的和应用场景的不同,各种数据同步服务框架的功能侧重点往往不尽相同,因而大家也会用各种大同小异的名称来称呼这类服务,比如数据传输 ...

  4. 从 Airflow 到 Apache DolphinScheduler,有赞大数据开发平台的调度系统演进

    点击上方 蓝字关注我们 作者 | 宋哲琦 ✎ 编 者 按 在不久前的 Apache  DolphinScheduler Meetup 2021 上,有赞大数据开发平台负责人 宋哲琦 带来了平台调度系统 ...

  5. 每日7千次的跨部门任务调度,有赞怎么设计大数据开发平台?

    随着公司规模的增长,对大数据的离线应用开发的需求越来越多,这些需求包括但不限于离线数据同步(MySQL/Hive/Hbase/Elastic Search 等之间的离线同步).离线计算(Hive/Ma ...

  6. 开源大数据开发平台DataSphereStudioLinkis踩坑记录

    Linkis:https://github.com/WeBankFinTech/Linkis DataSphereStudio:https://github.com/WeBankFinTech/Dat ...

  7. 微店大数据开发平台架构演进

    一.为什么需要大数据开发平台 传统的数据开发流程 开发人员通过公共账号登录安装了Hive.Hadoop客户端的gateway机器: 编写自己的脚本,调试代码,完成后通过crontab配置脚本定时执行: ...

  8. 《微店大数据开发平台架构演进》阅读有感

    <微店大数据开发平台架构演进>阅读有感 一.为什么需要大数据开发平台 微店在16年4月份之前,数据开发流程基本是这样的: 开发人员通过公共账号登录安装了Hive.Hadoop客户端的gat ...

  9. 《微店大数据开发平台架构演讲》读后感

    微店很熟悉的一个词汇,微店在16年4月之前,数据开发流程和现在是有很多的差异的; 在16年4月前:数据的开发流程: 1.开发人员通过公共账号登录安装了Hive.Hadoop客户端的gateway机器: ...

最新文章

  1. Laravel 7发行说明
  2. nuget打包文件丢失如何使用powershell脚本解决
  3. matlab定子磁链观测器,一种基于二阶广义积分器的永磁同步电机定子磁链观测方法...
  4. 一个高效、快速、稳定的PHP日志扩展。
  5. Java使用UDP聊天程序
  6. 01.elasticsearch请求使用的基本语法
  7. Https环境下WS接口两次连续调用出错
  8. Python Base64模块的使用
  9. Java的native方法
  10. 关于程序员前途的看法和我系列文章的想法
  11. lync显示无法找到服务器,Lync 2013 已知问题
  12. microsoft html help workshop_云话科技 | 奥比中光Workshop技术研讨线上沙龙
  13. ubuntu管理开机启动项
  14. 工业交换机芯片选择需要注意什么事项呢?
  15. c语言定义函数return,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句。...
  16. 数风流人物,俱在今朝!|2019年度CSDN博客之星TOP10榜单揭晓
  17. Valine添加自定义表情
  18. 波士顿大学 计算机专业,波士顿大学本科计算机专业课程设置是怎样的?
  19. 级数ex展开_关于e和ex级数型展开式的规律分析_数学专业.doc
  20. php漏洞eval,Web安全之代码执行漏洞

热门文章

  1. MPLS ×××配置
  2. 李天平×××作诞生记——《亮剑.NET:.NET深入体验与实战精要》
  3. 2进制、8进制、10进制、16进制...各种进制间的轻松转换(c#)
  4. java treemap_Java TreeMap HigherKey()方法与示例
  5. Java LocalDate类| toString()方法与示例
  6. Java PipedOutputStream connect()方法与示例
  7. python元组为什么不可变_为什么python字符串和元组是不可变的?
  8. python怎么开发软件_怎么使用python进行软件开发
  9. linux文本运行层次,Linux基础知识之---文件系统层级结构
  10. oracle变量名,Oracle中的替换变量,变量名,变量名