

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Etapa 1: Verificar se o endpoint está pronto para processar mensagens do Amazon SNS
<a name="SendMessageToHttp.prepare"></a>

Antes de inscrever um endpoint HTTP ou HTTPS em um tópico, você deve garantir que ele tem a capacidade de lidar com as solicitações HTTP POST que o Amazon SNS usa para enviar a confirmação de inscrição e as mensagens de notificação. Geralmente, isso significa a criação e a implantação de uma aplicação web (por exemplo, um servlet Java se o host do endpoint está executando Linux com Apache e Tomcat) que processa solicitações HTTP do Amazon SNS. Quando você inscreve um endpoint HTTP, o Amazon SNS envia uma solicitação de confirmação de inscrição. Seu endpoint deve estar preparado para receber e processar essa solicitação quando você criar a assinatura, porque o Amazon SNS envia essa solicitação nesse momento. O Amazon SNS não enviará notificações ao endpoint até que a assinatura seja confirmada. Assim que você confirmar a inscrição, o Amazon SNS enviará notificações para o endpoint quando uma ação de publicação for realizada no tópico inscrito.

**Para configurar o endpoint para processar as mensagens de notificação e de confirmação de inscrição**

1. Seu código deve conter os cabeçalhos HTTP de solicitações HTTP POST que o Amazon SNS envia para seu endpoint. O código deve procurar o campo do cabeçalho `x-amz-sns-message-type`, que mostra o tipo de mensagem que o Amazon SNS enviou a você. Ao visualizar o cabeçalho, você pode determinar o tipo da mensagem sem a necessidade de analisar o corpo da solicitação HTTP. Há dois tipos com os quais você precisa lidar: `SubscriptionConfirmation` e `Notification`. A mensagem `UnsubscribeConfirmation` é usada somente quando a assinatura é excluída do tópico.

   Para obter detalhes sobre o cabeçalho HTTP, consulte [Cabeçalhos HTTP/HTTPS](http-header.md). A seguinte solicitação HTTP POST é um exemplo de uma mensagem de confirmação de inscrição.

   ```
   POST / HTTP/1.1
       x-amz-sns-message-type: SubscriptionConfirmation
       x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
       x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
       Content-Length: 1336
       Content-Type: text/plain; charset=UTF-8
       Host: example.com
       Connection: Keep-Alive
       User-Agent: Amazon Simple Notification Service Agent
       
   {
     "Type" : "SubscriptionConfirmation",
     "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
     "Token" : "2336412f37f...",
     "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
     "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
     "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...",
     "Timestamp" : "2012-04-26T20:45:04.751Z",
     "SignatureVersion" : "1",
     "Signature" : "EXAMPLEpH+...",
     "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
   }
   ```

1. Seu código deve analisar o documento JSON no corpo da solicitação HTTP POST e no tipo de conteúdo text/plain para ler os pares de nome e valor que compõem a mensagem do Amazon SNS. Use um analisador JSON que faça a conversão da representação em sequência de escape dos caracteres de controle de volta para seus valores de caracteres ASCII (por exemplo, converter \$1n para um caractere de nova linha). Você pode usar um analisador JSON existente, como o [ProcessadorJackson JSON](https://github.com/FasterXML/jackson) ou escrever seu próprio analisador. Para enviar o texto nos campos de assunto e mensagem em formato JSON válido, o Amazon SNS deve converter alguns caracteres de controle para representações em sequência de escape para inclusão no documento JSON. Ao receber o documento JSON no corpo da solicitação POST enviada para o endpoint, você deve converter os caracteres em sequência de escape de volta para seus valores de caractere originais se quiser uma representação exata do assunto e das mensagens originais publicadas no tópico. Isso é essencial se você deseja verificar a assinatura de uma notificação, pois a assinatura usa a mensagem e o assunto em seus formulários originais como parte da string para assinar.

1. Seu código deve verificar a autenticidade de uma mensagem de notificação, confirmação de inscrição ou confirmação de cancelamento de inscrição enviada pelo Amazon SNS. o usar informações contidas na mensagem do Amazon SNS, o endpoint pode recriar a assinatura para que você possa verificar o conteúdo da mensagem comparando sua assinatura com a assinatura enviada pelo Amazon SNS junto com a mensagem. Para obter mais informações sobre como verificar a assinatura de uma mensagem, consulte [Verificação das assinaturas de mensagens do Amazon SNS](sns-verify-signature-of-message.md).

1. Com base no tipo especificado pelo campo de cabeçalho `x-amz-sns-message-type`, seu código deve ler o documento JSON contido no corpo da solicitação HTTP e processar a mensagem. A seguir, são apresentadas as diretrizes para lidar com os dois tipos principais de mensagens:  
**SubscriptionConfirmation**  
Leia o valor para `SubscribeURL` e acesse o URL. Para confirmar a assinatura e começar a receber notificações no endpoint, é necessário visitar o URL`SubscribeURL` (por exemplo, enviando uma solicitação HTTP GET para o URL). Consulte o exemplo de solicitação HTTP na etapa anterior para ver qual a aparência de `SubscribeURL`. Para obter mais informações sobre o formato da mensagem `SubscriptionConfirmation`, consulte [Formato JSON de confirmação de assinatura HTTP/HTTPS](http-subscription-confirmation-json.md). Ao acessar o URL, você receberá de volta uma resposta que se parece com o seguinte documento XML. O documento retorna o ARN da inscrição para o endpoint no elemento `ConfirmSubscriptionResult`.  

   ```
   <ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
      <ConfirmSubscriptionResult>
         <SubscriptionArn>arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn>
      </ConfirmSubscriptionResult>
      <ResponseMetadata>
         <RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId>
      </ResponseMetadata>
   </ConfirmSubscriptionResponse>
   ```
Como alternativa à visita ao`SubscribeURL`, você pode confirmar a assinatura usando a [ConfirmSubscription](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)ação com o valor correspondente `Token` definido na `SubscriptionConfirmation` mensagem. Se você deseja permitir que somente o proprietário do tópico e o proprietário da inscrição cancelem o recebimento para o endpoint, chame a ação `ConfirmSubscription` com uma assinatura AWS .  
**Notificação**  
Leia os valores de `Subject` e `Message` para obter as informações da notificação que foi publicada no tópico.  
Para obter mais detalhes sobre o formato da mensagem `Notification`, consulte [Cabeçalhos HTTP/HTTPS](http-header.md). A seguinte solicitação HTTP POST é um exemplo de uma mensagem de notificação enviada para o endpoint example.com.  

   ```
   POST / HTTP/1.1
       x-amz-sns-message-type: Notification
       x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
       x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
       x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
       Content-Length: 773
       Content-Type: text/plain; charset=UTF-8
       Host: example.com
       Connection: Keep-Alive
       User-Agent: Amazon Simple Notification Service Agent
       
   {
     "Type" : "Notification",
     "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
     "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
     "Subject" : "My First Message",
     "Message" : "Hello world!",
     "Timestamp" : "2012-05-02T00:54:06.655Z",
     "SignatureVersion" : "1",
     "Signature" : "EXAMPLEw6JRN...",
     "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
     "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
   }
   ```

1. Certifique-se de que o endpoint responde à mensagem de HTTP POST do Amazon SNS com o código de status apropriado. A conexão atingirá o tempo limite em aproximadamente 15 segundos. Se o endpoint não responder antes da conexão atingir o tempo limite ou retornar um código de status fora do intervalo de 200–4*xx*, o Amazon SNS considerará que houve falha na entrega da mensagem.

1. Certifique-se de que o seu código pode lidar com novas tentativas de entrega de mensagens do Amazon SNS. Se o Amazon SNS não receber uma resposta bem-sucedida do endpoint, ele tenta entregar a mensagem novamente. Isso se aplica a todas as mensagens, incluindo a mensagem de confirmação de inscrição. Por padrão, se a entrega inicial da mensagem falhar, o Amazon SNS faz até três novas tentativas com uma espera de 20 segundos entre as tentativas malsucedidas.
**nota**  
A solicitação da mensagem atinge o tempo limite de aproximadamente 15 segundos. Isso significa que se a falha na entrega da mensagem for causada por exceder o tempo limite, o Amazon SNS tentará outra vez por aproximadamente 35 segundos após a última tentativa de entrega. Você pode definir uma política de entrega diferente para o endpoint.

   O Amazon SNS usa o campo de cabeçalho `x-amz-sns-message-id` para identificar de forma exclusiva cada mensagem publicada em um tópico do Amazon SNS. Ao comparar as IDs mensagens que você processou com as mensagens recebidas, você pode determinar se a mensagem é uma tentativa de nova tentativa.

1. Se estiver inscrevendo um endpoint HTTPS, verifique se o endpoint tem um certificado do servidor de uma autoridade de certificado (CA) confiável. O Amazon SNS só envia mensagens a endpoints HTTPS que têm um certificado de servidor assinado por uma CA confiável para o Amazon SNS.

1. Implante o código que você criou para receber mensagens do Amazon SNS. Quando você assinar o endpoint, ele deve estar pronto para receber pelo menos a mensagem de confirmação de inscrição.