我正在尝试从s3存储桶中读取一些json文件,然后尝试将数据发布到rds和redshift中(使用为此开发/打算的post api)。
我使用boto3通过2种方法来实现此目的。以下是这些:
第一种方式:
import boto3
import json
import requests
url = 'xxxx.us-east-1.elb.amazonaws.com/v1'
headers = {'content-type': 'application/json', 'Host': 'development.my.dns.com'}
endpoint = url+'/my/post/endpoint'
s3_client = boto3.client("s3")
fileObj = s3_client.get_object(Bucket='my-bucket-name', Key='my-key-name'])
data = fileObj['Body'].read().decode('utf-8')
with requests.request('POST', endpoint, data=data, headers=headers, auth=(username, pwd), verify=False, stream=True) as r:
print("Status Code:",r.status_code)
第二种方式:
import boto3
import json
import requests
url = 'xxxx.us-east-1.elb.amazonaws.com/v1'
headers = {'content-type': 'application/json', 'Host': 'development.my.dns.com'}
endpoint = url+'/my/post/endpoint'
s3_res = boto3.resource('s3')
contentObj = s3_res.Object('my-bucket-name', 'my-key-name')
fileContent = contentObj.get()['Body'].read().decode('utf-8')
data = json.dumps(json.loads(fileContent))
with requests.request('POST', endpoint, data=data, headers=headers, auth=(username, pwd), verify=False, stream=True) as r:
print("Status Code:",r.status_code)
基本上,两种方法中的所有内容都是相同的(url
,endpoint
,headers
,requests.request
)和type(data)
是<class 'str'>
。但是状态代码总是不同的。
第二种方式给出Status Code: 200
。但是第一种方法会随机产生Status Code: 413
或Status Code: 502
有人可以解释为什么会这样吗?以上两种方法有何不同?我试图了解boto3 read()
数据不同时的情况。