从预先签名的URL卷曲S3对象时访问被拒绝错误

时间:2017-03-29 06:32:51

标签: python curl amazon-s3

这是我通过预签名网址从S3下载对象的脚本:

import boto3
import os


AWS_ACCESS_KEY_ID = '<>'
AWS_SECRET_ACCESS_KEY = '<>'
region = '<>'

session = boto3.Session(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, region_name = region)
s3 = session.client('s3')
url = s3.generate_presigned_url('get_object', Params = {'Bucket': '<>', 'Key': '<>.json'}, ExpiresIn = 100)

print url

os.system('curl ' + url)

由此,我可以获取网址,但os.system命令给出了以下错误:

<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>...</RequestId><HostId>...</HostId></Error>

但是,当我在浏览器中直接尝试网址时,它正在下载该文件。

那么,我在这里做错了什么?如何通过Python脚本下载文件?

1 个答案:

答案 0 :(得分:1)

在发出url请求时,使用引号(")围绕curl

os.system('curl "'+ url + '"')

要将其保存在文件中,请使用

os.system('curl -o /tmp/file.txt "'+ url + '"')

或者,使用requests模块制作GET

import requests
response = requests.get(url)