这是我通过预签名网址从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脚本下载文件?
答案 0 :(得分:1)
在发出url
请求时,使用引号("
)围绕curl
。
os.system('curl "'+ url + '"')
要将其保存在文件中,请使用
os.system('curl -o /tmp/file.txt "'+ url + '"')
或者,使用requests
模块制作GET
import requests
response = requests.get(url)