Различные длины символов новой строки для Django и серверов SNS при подписке конечной точки сервера на SNS - PullRequest
0 голосов
/ 06 марта 2020

В настоящее время я пишу API, который будет получать прямые сообщения (POST) от AWS Simple Notification Sercive. В настоящее время я сталкиваюсь с проблемой длины содержимого сообщения, отправленного SNS моей конечной точке. Ниже приведены полезные данные:

{
  "Type" : "Notification",
  "MessageId" : "da41e39f-ea4d-435a-b922-c6aae3915ebe",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Subject" : "test",
  "Message" : "test message",
  "Timestamp" : "2012-04-25T21:49:25.719Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLElDMXvB8r9R83tGoNn0ecwd5UjllzsvSvbItzfaMpN2nk5HVSw7XnOn/49IkxDKz8YrlH2qJXj2iZB0Zo2O71c4qQk1fMUDi3LGpij7RCW7AW9vYYsSqIKRnFS94ilu7NFhUzLiieYr4BKHpdTmdD6c0esKEYBpabxDSc=",
  "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:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55"
}

И заголовки:

    x-amz-sns-message-type: Notification
    x-amz-sns-message-id: da41e39f-ea4d-435a-b922-c6aae3915ebe
    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:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
    Content-Length: 761
    Content-Type: text/plain; charset=UTF-8
    Host: ec2-50-17-44-49.compute-1.amazonaws.com
    Connection: Keep-Alive
    User-Agent: Amazon Simple Notification Service Agent

Полезная нагрузка может иметь две длины содержимого: 761 и 773. Проблема заключается в том, что SNS считает символ новой строки одним символ ('\ n'), в то время как сервер django считает символ новой строки двумя символами ('\ r \ n'). SNS отправляет контент-длину 761, и, следовательно, django закрывает поток после чтения символа 761 в соответствии с ним. Но так как он считает, что символ новой строки состоит из двух символов, он оставляет некоторую информацию.

Также следует отметить, что SNS отправляет json с заголовком типа содержимого, установленным в «text / plain», а не в «not». приложение / json». Что я должен сделать, чтобы проанализировать все сообщение и не оставить после него ни одного символа.

Можем ли мы игнорировать заголовок длины содержимого в django?

...