Ich versuche, eine Verbindung zu einer IAM kontrollierten ElasticSearch Domain, ich habe eine Anfrage erstellt und signiert, und alles funktioniert gut für die Methode GET, aber auf der Methode POST bekomme ich eine 400 Bad RequestSchlechte Anfrage auf AWS ElasticSearch
Dies hat eindeutig etwas mit der Nutzlast zu tun. Wenn ich eine leere Zeichenkette für Nutzdaten ("") bereitstelle, funktioniert dies angemessen, aber alles andere führt zu einer ungültigen Anforderung.
Was fehlt mir?
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);