Примерно неделю я пытался отправить запрос в API поиска товаров. Я, конечно, проследил руководство по адаптации (https://developer-docs.amazon.com/amazo ... ur-request) и застрял на шаг 5, подписание запроса. Я хотел бы использовать aws sdk для подписи моего запроса, но не могу в этом разобраться, главным образом потому, что я никогда раньше не использовал aws, и все очень запутанно. Видимо, код для многорегиональных точек доступа был не тем, что мне нужно.
В любом случае, пройдя полдюжины кроличьих нор, которые ни к чему не привели, я наконец наткнулся на фрагмент кода, который мне нужен. считаю, что 90% есть. Я подключаюсь к конечной точке и получаю ответ, но, к сожалению, этот ответ не очень полезен. Т.е. мой код не работает, и я понятия не имею, почему. Я был бы признателен за некоторую помощь, либо в отношении ресурсов, где я могу узнать, как правильно подписать запрос с использованием SDK, как предложено в инструкции, либо если кто-то сможет обнаружить ошибку в коде, что также будет очень признательно.
Код: Выделить всё
400
{
"errors": [
{
"code": "InvalidInput",
"message": "Invalid Input",
"details": ""
}
]
}
Код: Выделить всё
import boto3
from botocore.auth import SigV4Auth
from botocore.awsrequest import AWSRequest
import requests
from datetime import datetime, timezone
# Step 1: Construct Amazon Business API URI
http_method = 'GET'
endpoint = 'https://eu.business-api.amazon.com'
path = '/products/2020-08-26/products'
query_string = '?products?productRegion=EU&locale=de_DE&facets=OFFERS&keywords=laptop'
full_url = f"{endpoint}{path}{query_string}"
# Step 2: Add headers
headers = {
'host': 'eu.business-api.amazon.com',
'user-agent': 'Request handler/2.0 (Language=Python/3.8; Platform=Windows/10)',
'x-amz-access-token': 'token',
'x-amz-date': datetime.now(timezone.utc).strftime('%Y%m%dT%H%M%SZ')
}
# Prepare the AWSRequest object
request = AWSRequest(method=http_method, url=full_url, headers=headers)
# Sign the request using Boto3 and your AWS credentials
session = boto3.Session()
credentials = session.get_credentials()
SigV4Auth(credentials, 'execute-api', 'eu-west-1').add_auth(request)
# Make the signed request using the 'requests' library
response = requests.request(
method=http_method,
url=request.url,
headers=dict(request.headers)
)
# Print the response from the API
print(response.status_code)
print(response.text)
Источник: https://stackoverflow.com/questions/781 ... pi-request