Различные способы чтения данных из корзины s3 с использованием boto3 - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь прочитать какой-то json-файл из корзины s3, а затем пытаюсь отправить данные в rds и красное смещение (используя post api, разработанный / предназначенный для этого).

Я подошел, чтобы сделать это в2 способа использования boto3.Ниже приведены те:

1-й способ:

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)

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_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'> в обоих подходах.Но коды состояния всегда разные.

2-й способ дает Status Code: 200.Но 1-й способ дает Status Code: 413 или Status Code: 502 случайным образом

Может ли кто-нибудь объяснить, почему это так?что отличается в вышеупомянутых двух подходах?Я пытаюсь понять, что происходит, когда boto3 read() данные по-разному.

...