使用 python 中的请求模块连接到 Azure-Datalakes-gen2 时遇到问题

禁食

我目前正在尝试使用 python 连接到 azure datalakes-gen2,以从存储在其中的 json 文件中获取信息。听说用于 python 的 azure-datalakes 模块不适用于第 2 代(并且我自己也遇到了麻烦),我继续通过 rest-api 和在 python 中找到的请求包进行连接。然而,阅读 Microsoft 留下的参考资料以及所需的身份验证标头让我更加困惑该怎么做。

虽然我对 python 有一个大致的了解,但在涉及更高级的项目时我仍然是一个业余爱好者,并且总是需要查找内容,但是这是我第一次提出问题寻求帮助而不是搜索直到我找到答案(所以请耐心等待)。

我找到了 Michal Pawlikowski 解释如何通过 powershell 连接的有用链接,这有助于解释很多松散的结局,但仍然存在两个问题,首先是我不确定是否正确编码身份验证标头。特别是“通过在 UTF-8 编码的签名字符串上使用 HMAC-SHA256 算法对该字符串进行编码”,其次是这只会列出在目录中找到的文件,而不是文件中包含的信息。

这是我尝试过的


date = "Wed, 15 May 2019 14:28:01 GMT"

string_to_sign = 'GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:'+date+'\nx-ms-version:2018-11-09\n/'+STORAGE_ACCOUNT_NAME+'/'+FILE_SYSTEM_NAME+'\nrecursive:true\nresource:fileststem'

signature = #Encoded string_to_sign + key, am unsure how to approach

auth_header = "SharedKey "+STORAGE_ACCOUNT_NAME+":"+signature

headers = {"Authorization" : auth_header, "x-ms-version" : "2018-11-09", "x-ms-date" : date}


req = requests.get("https://"+STORAGE_ACCOUNT_NAME+".dfs.core.windows.net/" + FILE_SYSTEM_NAME + "?recursive=true&resource=filesystem", headers=headers)

我希望 req.text 包含在 json 文件中找到的信息,但是我总是会收到 403 错误,说明要确保我的标题格式正确。

伊万杨 |

如果你想读取文件内容,你应该使用Read api

下面的代码在我身边工作:

import requests
import datetime
import hmac
import hashlib
import base64

storage_account_name = 'storage_account_name'
storage_account_key = 'storage_account_key'
api_version = '2018-11-09'
request_time = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')

#the file path on adls gen2
FILE_SYSTEM_NAME='dd1/11.txt'

string_params = {
    'verb': 'GET',
    'Content-Encoding': '',
    'Content-Language': '',
    'Content-Length': '',
    'Content-MD5': '',
    'Content-Type': '',
    'Date': '',
    'If-Modified-Since': '',
    'If-Match': '',
    'If-None-Match': '',
    'If-Unmodified-Since': '',
    'Range': '',
    'CanonicalizedHeaders': 'x-ms-date:' + request_time + '\nx-ms-version:' + api_version,
    'CanonicalizedResource': '/' + storage_account_name+'/'+FILE_SYSTEM_NAME
    }

string_to_sign = (string_params['verb'] + '\n' 
                  + string_params['Content-Encoding'] + '\n'
                  + string_params['Content-Language'] + '\n'
                  + string_params['Content-Length'] + '\n'
                  + string_params['Content-MD5'] + '\n' 
                  + string_params['Content-Type'] + '\n' 
                  + string_params['Date'] + '\n' 
                  + string_params['If-Modified-Since'] + '\n'
                  + string_params['If-Match'] + '\n'
                  + string_params['If-None-Match'] + '\n'
                  + string_params['If-Unmodified-Since'] + '\n'
                  + string_params['Range'] + '\n'
                  + string_params['CanonicalizedHeaders']+'\n'
                  + string_params['CanonicalizedResource'])

signed_string = base64.b64encode(hmac.new(base64.b64decode(storage_account_key), msg=string_to_sign.encode('utf-8'), digestmod=hashlib.sha256).digest()).decode()
headers = {
    'x-ms-date' : request_time,
    'x-ms-version' : api_version,
    'Authorization' : ('SharedKey ' + storage_account_name + ':' + signed_string)
}
url = ('https://' + storage_account_name + '.dfs.core.windows.net/'+FILE_SYSTEM_NAME)
r = requests.get(url, headers = headers)

#print out the file content
print(r.text)

测试结果:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用延续令牌连接到 azure-datalakes 时出错

来自分类Dev

使用Python请求打开页面时遇到问题

来自分类Dev

使用Python的SQLALCHEMY连接到Cloud SQL(PostgreSQL)时遇到问题

来自分类Dev

在python中连接到Cloud SQL时遇到问题

来自分类Dev

使用 Python super 时遇到问题

来自分类Dev

我在使用 .pem 通过 SSH 连接到 AWS EC2 时遇到问题

来自分类Dev

使用 tox 运行 python 单元测试时遇到问题 - 已安装模块的导入错误

来自分类Dev

使用SFTP连接到SoftLayer ObjectStorage时遇到问题

来自分类Dev

使用Psycopg2将数据从python写入PostgreSQL时遇到问题

来自分类Dev

使用python 3在树莓派2上运行pyfirmata时遇到问题

来自分类Dev

使用python扩展名在gdb中打印本征类型时遇到问题

来自分类Dev

使用python在sqlite3中存储numpy数组时遇到问题

来自分类Dev

使用 python 和 selenium 从表中抓取数据时遇到问题

来自分类Dev

使用beautifulsoup python从页面中抓取特定元素时遇到问题

来自分类Dev

在python 3中应用python 2代码时遇到问题

来自分类Dev

在Python中调用模块函数时遇到问题?

来自分类Dev

Azure Function:使用Azure Function App中的PowerShell脚本写入ADLS Gen2

来自分类Dev

使用 Python 或 Java 从本地上传数据到 Azure ADLS Gen2

来自分类Dev

使用Enthought Python安装IJulia时遇到问题

来自分类Dev

在C#中使用python webservice时遇到问题

来自分类Dev

在python中使用while循环时遇到问题

来自分类Dev

使用Python从AJAX获取数据时遇到问题

来自分类Dev

我在使用 python 循环创建测验时遇到问题

来自分类Dev

在 Python 中使用 Selenium 单击按钮时遇到问题

来自分类Dev

使用GCC链接到静态库时遇到问题

来自分类Dev

从 PyCharm 的根目录导入 python 模块时遇到问题

来自分类Dev

从curl请求转换为Python时遇到问题

来自分类Dev

从curl请求转换为Python时遇到问题

来自分类Dev

在模块中使用用户表单时遇到问题

Related 相关文章

  1. 1

    使用延续令牌连接到 azure-datalakes 时出错

  2. 2

    使用Python请求打开页面时遇到问题

  3. 3

    使用Python的SQLALCHEMY连接到Cloud SQL(PostgreSQL)时遇到问题

  4. 4

    在python中连接到Cloud SQL时遇到问题

  5. 5

    使用 Python super 时遇到问题

  6. 6

    我在使用 .pem 通过 SSH 连接到 AWS EC2 时遇到问题

  7. 7

    使用 tox 运行 python 单元测试时遇到问题 - 已安装模块的导入错误

  8. 8

    使用SFTP连接到SoftLayer ObjectStorage时遇到问题

  9. 9

    使用Psycopg2将数据从python写入PostgreSQL时遇到问题

  10. 10

    使用python 3在树莓派2上运行pyfirmata时遇到问题

  11. 11

    使用python扩展名在gdb中打印本征类型时遇到问题

  12. 12

    使用python在sqlite3中存储numpy数组时遇到问题

  13. 13

    使用 python 和 selenium 从表中抓取数据时遇到问题

  14. 14

    使用beautifulsoup python从页面中抓取特定元素时遇到问题

  15. 15

    在python 3中应用python 2代码时遇到问题

  16. 16

    在Python中调用模块函数时遇到问题?

  17. 17

    Azure Function:使用Azure Function App中的PowerShell脚本写入ADLS Gen2

  18. 18

    使用 Python 或 Java 从本地上传数据到 Azure ADLS Gen2

  19. 19

    使用Enthought Python安装IJulia时遇到问题

  20. 20

    在C#中使用python webservice时遇到问题

  21. 21

    在python中使用while循环时遇到问题

  22. 22

    使用Python从AJAX获取数据时遇到问题

  23. 23

    我在使用 python 循环创建测验时遇到问题

  24. 24

    在 Python 中使用 Selenium 单击按钮时遇到问题

  25. 25

    使用GCC链接到静态库时遇到问题

  26. 26

    从 PyCharm 的根目录导入 python 模块时遇到问题

  27. 27

    从curl请求转换为Python时遇到问题

  28. 28

    从curl请求转换为Python时遇到问题

  29. 29

    在模块中使用用户表单时遇到问题

热门标签

归档