0

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); 

Antwort

0

Anmerkung: Wenn Sie in dieses Problem, den tatsächlichen Inhalt der Antwort zu überprüfen, kann es aufgrund einer Nichtübereinstimmung zwischen dem Index und Abfrage sein.

Mein Problem war, dass die spezifische Abfrage, die ich verwendete, für den angegebenen Index ungeeignet war, und das führte zu einem 400