0

Я пытаюсь подключиться к контролируемому IAM домену ElasticSearch, я создал запрос и подписал его, и все работает отлично для метода GET, но по методу POST я получаю 400 Bad RequestНеверный запрос на AWS ElasticSearch

Это явно имеет отношение к полезной нагрузке. Если я предоставляю пустую строку полезной нагрузки (""), она работает надлежащим образом, но все остальное приводит к плохим запросам.

Что мне не хватает?

val url = s"https://$host/TEST/article/_search" 
val serviceName = "es" 
val regionName = "us-east-1" 


val request = new DefaultRequest(serviceName) 

val payload = 
    """{"1":"1"}""".trim 
val payloadBytes = payload.getBytes(StandardCharsets.UTF_8) 
val payloadStream = new ByteArrayInputStream(payloadBytes) 
request.setContent(payloadStream) 

val endpointUri = URI.create(url) 
request.setEndpoint(endpointUri) 
request.setHttpMethod(HttpMethodName.POST) 

val credProvider = new EnvironmentVariableCredentialsProvider 
val credentials = credProvider.getCredentials 

val signer = new AWS4Signer 

signer.setRegionName(regionName) 
signer.setServiceName(serviceName) 

signer.sign(request, credentials) 

val context = new ExecutionContext(true) 

val clientConfiguration = new ClientConfiguration() 
val client = new AmazonHttpClient(clientConfiguration) 

val rh = new MyHttpResponseHandler 
val eh = new MyErrorHandler 

val response = 
    client.execute(request, rh , eh, context); 

ответ

0

примечание: если вы столкнулись с этой проблемой, проверьте фактическое содержание ответа, это может быть результатом несоответствия между индексом и вашим запросом.

Моя проблема заключалась в том, что конкретный запрос, который я использовал, был неуместным для указанного индекса, и это привело к тому, что 400