Convert application/x-www-form-urlencoded to variables

Just starting out? Need help? Post your questions and find answers here.
lesserpanda
User
User
Posts: 65
Joined: Tue Feb 11, 2020 7:50 am

Convert application/x-www-form-urlencoded to variables

Post by lesserpanda »

Hi,
is there a library or something which can lay a POSTED application/x-www-form-urlencoded HTTP POST and split it nicely into variables?

I have been looking at the Atomic HTTP server example and got the whole buffer but I'm not too familiar with how to split to get the relevant data out.

Thanks!
infratec
Always Here
Always Here
Posts: 7579
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: Convert application/x-www-form-urlencoded to variables

Post by infratec »

There is no library, because it completely depends on your body.
If it is your REST-API stuff, then the body should be application/json.
Then you can use ExtractJSONStructure().

Else, we need to see the body.
benubi
Enthusiast
Enthusiast
Posts: 215
Joined: Tue Mar 29, 2005 4:01 pm

Re: Convert application/x-www-form-urlencoded to variables

Post by benubi »

You can use the CGI/Fast-CGI library to access that data - but I suppose you want to build on the atomic web server example or stand-alone app.

The URL encoded variables are separated by an & (and) character.

Name1=Value2&Name2=Value2&Name3=Value3

Special characters, like Space, CR and LF etc. are URL encoded. The HTTP strings carrying that data are normally encoded in UTF-8 format.

Perhaps this will work for you. You'd have to PeekS() the content following the header to a string.

Code: Select all

Procedure ExtractURLPairs(String$, Map result.s())
  Protected count = CountString(String$, "&") + 1
  Protected pair$
  Protected key$
  Protected value$
  Protected i
  For i = 1 To count Step 1
    pair$  = ReplaceString(StringField(String$, i, "&"),"+",Chr(32))
    key$   = URLDecoder(StringField(pair$, 1, "="))
    value$ = URLDecoder(StringField(pair$, 2, "="))
    AddMapElement(result(), key$, #PB_Map_NoElementCheck)
    result() = value$
    Debug key$ + " = "+value$
  Next
EndProcedure





NewMap myvar.s()
ExtractURLPairs("var1=hello&var2=world&abc=+++Spaces+++&username=snake.plissken&password=compromised&apple=7&banana=3", myvar())

Debug myvar("var1") + " " +myvar("var2")




lesserpanda
User
User
Posts: 65
Joined: Tue Feb 11, 2020 7:50 am

Re: Convert application/x-www-form-urlencoded to variables

Post by lesserpanda »

@infratec, @benubi, looking at a multipart HTTP post

Like in PHP, it goes into $_POST variable 'automatically'

It's the mailgun service posting the received email. So I changed code in Atomic Web Server for POST and tried to just simply output the received POST - you can see in the bottom of the code for handling POST. Then I run as console app and I show you the output below. There's only 1 time the POST comes in but it gets split many times. Sorry newbie and not quite understanding certain code.

Code: Select all

;
; ------------------------------------------------------------
;
;       Atomic Web Server in PureBasic
;
;          (c) Fantaisie Software
;
; ------------------------------------------------------------
;

; NOTE: this a small demonstration of a standalone webserver in PureBasic
; It is NOT meant to be used on production !
;
; To test it: launch the server and open a browser using the following URL:
; http://127.0.0.1
;

Port = 8012
BaseDirectory$ = "www/"
DefaultPage$   = "Index.html"
AtomicTitle$   = "Atomic Web Server v1.0"

Global EOL$

EOL$ = Chr(13)+Chr(10)

*Buffer = AllocateMemory(10000)

; Only bind on localhost to avoid firewall issues
;
If CreateNetworkServer(0, Port, #PB_Network_IPv4 | #PB_Network_TCP, "0.0.0.0")
  
  OpenWindow(0, 100, 200, 320, 50, "Atomic Web Server (0.0.0.0:"+Port+")")
  ButtonGadget(0, 10, 10, 300, 30, "Quit")
  
  OpenConsole()
  PrintN("Hello")
  
  Repeat
    
    ; Use a non-blocking event poll, to be able to check for the network server events
    ;
    Repeat
      Event = WindowEvent()
      
      Select Event 
        Case #PB_Event_CloseWindow 
          Quit = 1 
          
        Case #PB_Event_Gadget
          If EventGadget() = 0
            Quit = 1
          EndIf
      EndSelect
    Until Event = 0
    
    ServerEvent = NetworkServerEvent()
    
    If ServerEvent
      ClientID = EventClient()
      
      Select ServerEvent
          
        Case #PB_NetworkEvent_Connect  ; When a new client has been connected...
          Debug "New client connected"
          
        Case #PB_NetworkEvent_Disconnect  ; When a client has closed the connection...
          Debug "Client disconnected"
          
        Case #PB_NetworkEvent_Data 
          RequestLength = ReceiveNetworkData(ClientID, *Buffer, 2000)
          Gosub ProcessRequest
          
      EndSelect
      
    Else
      Delay(20)  ; Don't stole the whole CPU !
    EndIf
    
  Until Quit = 1
  
  CloseNetworkServer(0)
Else
  MessageRequester(AtomicTitle$, "Error: can't create the server (port in use ?).", 0)
EndIf

End


Procedure BuildRequestHeader(*Buffer, DataLength, ContentType$)
  
  Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$, -1, #PB_UTF8)                     : *Buffer+Length
  Length = PokeS(*Buffer, "Date: Wed, 11 Fec 2017 11:15:43 GMT"+EOL$, -1, #PB_UTF8) : *Buffer+Length
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$, -1, #PB_UTF8)      : *Buffer+Length
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$, -1, #PB_UTF8)    : *Buffer+Length
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$, -1, #PB_UTF8)         : *Buffer+Length
  Length = PokeS(*Buffer, #CRLF$, -1, #PB_UTF8)                                     : *Buffer+Length
  
  ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10), -1, #PB_UTF8) : *Buffer+Length
  ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$, -1, #PB_UTF8) : *Buffer+Length
  ; Length = PokeS(*Buffer, "Connection: close"+EOL$, -1, #PB_UTF8) : *Buffer+Length
  
  ProcedureReturn *Buffer
EndProcedure


ProcessRequest:

a$ = PeekS(*Buffer, -1, #PB_UTF8)
PrintN("--------------------------------- I GOT ")
PrintN(a$)
If Left(a$, 4) = "POST"
  Repeat
    IN=FindString(a$,CRLF$,1)
    If IN
      b$=Left(a$,IN-1)
      a$=Mid(a$,IN+2)
      If Len(b$)=0
        Params$=a$
        Break
      EndIf
    EndIf
  Until IN=0
  ;ForEach Params$
  Debug "Param:" + Params$
  ;Next
  If ReadFile(0, BaseDirectory$+"ok.html")
    FileLength = Lof(0)
    ContentType$ = "text/html"
    
    *FileBuffer   = AllocateMemory(FileLength+200)
    *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)
    
    ReadData(0, *BufferOffset, FileLength)
    CloseFile(0)
    
    SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
    FreeMemory(*FileBuffer)
  EndIf
  
ElseIf Left(a$, 3) = "GET"
  
  MaxPosition = FindString(a$, Chr(13), 5)
  Position = FindString(a$, " ", 5)
  If Position < MaxPosition
    RequestedFile$ = Mid(a$, 6, Position-5)      ; Automatically remove the leading '/'
    RequestedFile$ = RTrim(RequestedFile$)
  Else
    RequestedFile$ = Mid(a$, 6, MaxPosition-5)   ; When a command like 'GET /' is sent..
  EndIf
  
  ; The following routine transforme all '/' in '\' (Windows format)
  ;
  Structure tmp
    a.b
  EndStructure
  
  If RequestedFile$ = ""
    RequestedFile$ = DefaultPage$
  Else
    *t.tmp = @RequestedFile$
    While *t\a <> 0
      If *t\a = '/' : *t\a = '\' : EndIf
      *t+1
    Wend
  EndIf
  
  ; Test if the file exists, and if not display the error message
  ;
  
  If ReadFile(0, BaseDirectory$+RequestedFile$, #PB_UTF8)
    
    FileLength = Lof(0)
    
    Select Right(RequestedFile$,4)
      Case ".gif"
        ContentType$ = "image/gif"
        
      Case ".jpg"
        ContentType$ = "image/jpeg"
        
      Case ".txt"
        ContentType$ = "text/plain"
        
      Case ".zip"
        ContentType$ = "application/zip"
        
      Default
        ContentType$ = "text/html"
        
    EndSelect
    
    *FileBuffer   = AllocateMemory(FileLength+200)
    *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)
    
    ReadData(0, *BufferOffset, FileLength)
    
    CloseFile(0)
    
    SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
    
    FreeMemory(*FileBuffer)
  Else
    If ReadFile(0, BaseDirectory$+"AtomicWebServer_Error.html")
      FileLength = Lof(0)
      ContentType$ = "text/html"
      
      *FileBuffer   = AllocateMemory(FileLength+200)
      *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)
      
      ReadData(0, *BufferOffset, FileLength)
      CloseFile(0)
      
      SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
      FreeMemory(*FileBuffer)
    EndIf
  EndIf
EndIf

Return

Code: Select all

--------------------------------- I GOT
POST / HTTP/1.1
Host: x.x.x.x:8012
User-Agent: Go-http-client/1.1
Content-Length: 19640
Accept: */*
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip

Accept-Language=en-AU%2C+en-US&Arc-Authentication-Results=i%3D1%3B+mx.microsoft.com+1%3B+spf%3Dpass+smtp.mailfrom%3Dmydomain.com%3B+dmarc%3Dpass+action%3Dnone+header.from%3Dmydomain.com%3B+dkim%3Dpass+header.d%3Dmydomain.com%3B+arc%3Dnone&Arc-Message-Signature=i%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dmicrosoft.com%3B+s%3Darcselector9901%3B+h%3DFrom%3ADate%3ASubject%3AMessage-ID%3AContent-Type%3AMIME-Version%3AX-MS-Exchange-AntiSpam-MessageData-ChunkCount%3AX-MS-Exchange-AntiSpam-MessageData-0%3AX-MS-Exchange-AntiSpam-MessageData-1%3B+bh%3D7ah5YhW08g7LgS0I1ZB2QBSkCoP9mO4fbEW2iRVvuso%3D%3B+b%3DNdlid9%2BqWShfFXWMehOYywAITfOc%2BYEnAdW9CnmxAMoiIr37amcP50szZvm9oXdrpxUEmw3nD%2Fr67VhvjY28IO7uVA4vGjdsp0BGEb4f7c9xnhHY%2B%2BzTB3VEs0T8csAXo8gO%2BOx%2BjS95Mr44KHuCkFEhNvS8oUCo3x9tcFMfQfPoLR6jmmodgdpEC%2F626uLx6Dl6A6%2BZaUFg36xrdIidoiSU%2F%2FyjlYGQDmU%2FZl%2BQZTaFPuKppvVr6Po%2F2oX7XlklFFXQ0vOIi1G%2FnU%2FYIgC8i%2FaCx8X2P3hX16%2FJXKGrueWZDszQE5PxtBqjYBjyzUzyjb5vRT2HHEtmBFSpkMq9%2BA%3D%3D&Arc-Seal=i%3D1%3B+a%3Drsa-sha256%3B+s%3Darcselector9901%3B+d%3Dmicrosoft.com%3B+cv%3Dnone%3B+b%3DhX81X9wwTgAUMMwae1Y7VnCJhIy%2BHoPg2rnSocmWAEDmQRsvWjYkKF50CNlkSUiGfA3IXk%2BeWis777osaoJ4jbGo3oLFFhAaA4RLSaw%2Fke4nKUhrIZuC2yx4K907PyJJnQQUUn9gOUg1dWL3J2Rxd%2BA7R34hez1IHKLnYXbAjpawOoriwZE4SCTcwEJ3PF10g7d5IaxxumC3mdgbK6gPwpd5sifScwhilTMBjwHkRPeMT21Qt1IYiAncYzhxj%2B4nb9MLvQqNt4hsRoxZkY%2BpGl97BKKnL95SCRzdDHvZSV7Lyc9c2EQqwEyIis%2FCvXtjbEiLgX%2BMSom5YrNIaCX6cw%3D%3D&Authentication-Results=dkim%3Dnone+%28message+not+signed%29+header.d%3Dnone%3Bdmarc%3Dnone+action%3Dnone+header.from%3Dmydomain.com%3B&Content-Language=en-AU&Content-Type=multipart%2Falternative%3B+boundary%3D%22_000_SYBP282MB2882BE98B1F239B13AF45915AD6C9SYBP282MB2882AUSP_%22&Date=Wed%2C+3+May+2023+00%3A19%3A39+%2B0000&From=M
--------------------------------- I GOT
arco+Sacotelli+%3Cmw%40mydomain.com%3E&In-Reply-To=%3C57214212.88122.1682726400093.JavaMail.zimbra%40zimbra.maptco.com.au%3E&Message-Id=%3CSYBP282MB2882BE98B1F239B13AF45915AD6C9%40SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM%3E&Mime-Version=1.0&Received=from+SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM+%28%5Bfe80%3A%3Af862%3Ad4c6%3A60d9%3Ae4b2%5D%29+by+SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM+%28%5Bfe80%3A%3Af862%3Ad4c6%3A60d9%3Ae4b2%256%5D%29+with+mapi+id+15.20.6340.031%3B+Wed%2C+3+May+2023+00%3A19%3A39+%2B0000&References=%3C57214212.88122.1682726400093.JavaMail.zimbra%40zimbra.machhiato.com.au%3E&Subject=Fw%3A+Zextras+Suite+License+Warning+From+server+zimbra.machhiato.com&Suggested_attachment_session_id=92f180dd-dd95-010c-292a-680b2c024eb8&Thread-Index=AQHZei2TdaSoiiGjqEqZwTmHdyTL9K9HtXqz&Thread-Topic=Zextras+Suite+License+Warning+From+server+zimbra.machhiato.com&To=%22csteam-test%40apps.mydomain.com%22+%3Ccsteam-test%40apps.mydomain.com%3E&X-Envelope-From=mw%40mydomain.com&X-Forefront-Antispam-Report=CIP%3A255.255.255.255%3BCTRY%3A%3BLANG%3Aen%3BSCL%3A1%3BSRV%3A%3BIPV%3ANLI%3BSFV%3ANSPM%3BH%3ASYBP282MB2882.AUSP282.PROD.OUTLOOK.COM%3BPTR%3A%3BCAT%3ANONE%3BSFS%3A%2813230028%29%28346002%29%28376002%29%2834096005%29%28366004%29%28136003%29%2839830400003%29%28396003%29%28451199021%29%28122000001%29%2838100700002%29%284744005%29%282906002%29%288936002%29%285660300002%29%2852536014%29%288676002%29%2833656002%29%2886362001%29%2838070700005%29%2855016003%29%2871200400001%29%287696005%29%28478600001%29%2819627405001%29%28186003%29%289686003%29%286506007%29%2826005%29%2853546011%29%2883380400001%29%2866946007%29%2876116006%29%2866446008%29%2866556008%29%2866476007%29%2864756008%29%2841300700001%29%286916009%29%28316002%29%3BDIR%3AOUT%3BSFP%3A1102%3B&X-Mailgun-Incoming=Yes&X-Microsoft-Antispam=BCL%3A0%3B&X-Microsoft-Antispam-Message-Info=T3UOzYpaz547zL3pBJb1thc5x7PFTK5JCWVINfmenwoXqt7aZG%2FuSZK2tRJNEkjsF78ptNsYftJyx6yIDfNfbjtyHTp6hO3dfJsSoI2whgy5JIhn92aimXOk0TIVWLcV
--------------------------------- I GOT
iulgXRoC7mLeweVbFrWk6qHnjmIjFfrMEOAsNBvQb6c05sJuBI1SVIDnzlXVxEilrhpuHUMpsG0wQQafYm%2BwJmXInGyXMq26XT%2Btj3P3udV6bOw17kiLnTNQ9vspSfyT%2B2LUvU3yxoQNI4kAwXN7k77%2BIpOgoyw0VtvB38e0IQ4hvl72phiIVz7Hfhzmn%2Bm1egscq8RSQRODHKmV0gISZ6QES1TQYhyAENraWHCqlL%2FtqLCREmw9Leyo%2Fcd1aVy8WtB8y%2F19PlWdLR8oXHwX8IbNu1XpBeAUM5IjFbuP0%2B3di4yaRT9mzqfOC3Xp5f7HRGaXPTzTRFA2xghvERSoq40%2FvxQBT%2BaqootHyS970YfzEwcaMNJcZwh6dUpdeVojQ2%2BHqUnFFDwz5TMJemJIyiQPKCU2cu57cGU6R4Ul3N4HlzaSdG5OetgSx0K2BfJdK5rB835jHWuBDlEYieo3OV1dbrwuRk4b1LtsNyZ8YiA%2Bant1Vi6zEXTb6H1WFJgP&X-Ms-Exchange-Antispam-Messagedata-0=JpRLd5R2514aeJS1sgEaDhNVij2yiLXMybWbZzbGM%2BaA3n%2BSVcvtWtZpnlflFx%2Bw8frCq90aUXWNPwQujgRcViADvdPEDDtSnhxQD3PDLmmiz3J8IvPUvnAYbTR%2BrdbZM0gpmomGH9XCFLv6OrWKApyAjckNCBFvC8TAv7t0VybHYOs06EQl8sYK4q6JHsipWcF%2BAHZMoxsg6fXGRTwuKki9i%2Fht9aVS7aYLd%2Br11G%2F5ezxh2iZE58KFh63%2Bnge20rhw8y5dcF4BBbCPAZfW6VlE5IRE%2FiO5l7twAy7lF15SYH9wpc1ZWC41loG6o9TQKEHd4LyxPSNJeM31CNa0UMHOXpz3y2lsMA98tfRbJ%2BTflnUsZhvhPgYwSQn3g96xBwUze2EOt3qfAgUAskT%2B0%2F5aHkQdBqQLlIE3UEuYrckFl5NgJsFeFfJvy3UC3dw2%2Bq4Zc%2BTFNMcMEI1BwV5A3r0NXkDifjqWaRFIBm%2FLKYmp8xBXW7LM%2FBLrJSJ61YReFCRH0DkrZNLJAdSDrbmDclkE%2B6Eq%2BVXO1sJgW%2FxkOZggtdAITOrPN%2FQLar%2Bmt0fffMwtZEOvdWf%2BWv%2F6N9D7OiMrdAipmGredMobEBEr8HT%2BNDiSQQbCV4kjsUFm4VlWPnBAKuY3MXCAiuHAk4MP%2BqpZRzhItoaGH78OIJlZc0iOkom90smYryG9TGJM1062GdyBfxZLmNQdHTRZJcuiEhu%2FAhZH%2FQMdg7sL0qbR7GHuNk%2BVLRBdMlcmVvf3%2FP5DnVYJeAEVij6pQkiX94Ql4dUsDc2%2FZsYo1ffgsU5PrSjcErzlKa%2BV2491I3hHMyHPImkz2DVrAXmQ2dGsMDz3ZOAzEDB%2FJSed9WUkpsf6gs74q491JEYGByOCuVqSTLjpjFvqxai1SIU8sLU7jAmbrZXDFiYm46Z6ztb02Yd4uVZxnDWDZFtO31Q9KLuxhPO5wVl%2BSl3PQH4T7E%2FDxlxFku7FJHWZYccTtQAir4D0HSNYGIgxiwnMRoCF%2FltZ%2BYDaoX9hp25bevvqsIY0lV4uZ1F%2BIwzx9KXgdu6ViY9XEkLVyArZmltvzbFpCblwe%2BzfTJy%2FU9iv693qvdOFIaqUtFAAb%2FNs1OcwptDQOC239HX1llCt6ixnN3nAU6jWJzbYaUMotkZoj%2FNn7N%2BskrkGJFXcxKk1WqJkf24N6Q2O%2BV3Zs02d5rTuIhgYXNDIFEDblYZKVN3tKSSIH00ln40exdEWUH3PCtW0ewL%2FNqspNo4Axvy%2Bj9ZWfXus4tlJTaXlZBW74b9FRXcsQngxqizs073DWGtapNotJs%2BS%2Fa9uegoJGLZA
--------------------------------- I GOT
QvM3PpYYwZAUZUcS3mYgACMcl5HIOla1Krrdl5f6b%2FiwGEiA9aPHIarDQyGNhJ%2BnidbE3I03cq0ObBO7A5wBdyHHQNsXFsMeFtS5LqahauVyvQnzJQPNaGqm0afdRDgkKNdz2Jp8NXsFnnre0EgPksMhWW8DL8OeopS54fkqyckj2MTOV6vVGDbM3KSe3TLBml9xwzsJkDlKO7%2B%2BRzZd5gRH2C6KCqbNRVDACifoz1U2MdpkJK%2F%2Blk7sIvFs7HXLC28r5iVSj7Ain6MH&X-Ms-Exchange-Antispam-Messagedata-Chunkcount=1&X-Ms-Exchange-Antispam-Relay=0&X-Ms-Exchange-Crosstenant-Authas=Internal&X-Ms-Exchange-Crosstenant-Authsource=SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM&X-Ms-Exchange-Crosstenant-Fromentityheader=Hosted&X-Ms-Exchange-Crosstenant-Id=878ba29f-aa36-4749-a662-958ebb7951f1&X-Ms-Exchange-Crosstenant-Mailboxtype=HOSTED&X-Ms-Exchange-Crosstenant-Network-Message-Id=377b0ee6-98a7-40b2-6e5d-08db4b6c15d8&X-Ms-Exchange-Crosstenant-Originalarrivaltime=03+May+2023+00%3A19%3A39.7853+%28UTC%29&X-Ms-Exchange-Crosstenant-Userprincipalname=Yy%2BB4BUwI3LNk%2F%2BpG1w7ajWnjrmCPsIZuk8buaDTAJkENcPK3PHpY8QMM%2FsrxGHW6tLU%2BSBS5jgFId8IcSm6Ag%3D%3D&X-Ms-Exchange-Senderadcheck=1&X-MsqfAgUAskT%2B0%2F5aHkQdBqQLlIE3UEuYrckFl5NgJsFeFfJvy3UC3dw2%2Bq4Zc%2BTFNMcMEI1BwV5A3r0NXkDifjqWaRFIBm%2FLKYmp8xBXW7LM%2FBLrJSJ61YReFCRH0DkrZNLJAdSDrbmDclkE%2B6Eq%2BVXO1sJgW%2FxkOZggtdAITOrPN%2FQLar%2Bmt0fffMwtZEOvdWf%2BWv%2F6N9D7OiMrdAipmGredMobEBEr8HT%2BNDiSQQbCV4kjsUFm4VlWPnBAKuY3MXCAiuHAk4MP%2BqpZRzhItoaGH78OIJlZc0iOkom90smYryG9TGJM1062GdyBfxZLmNQdHTRZJcuiEhu%2FAhZH%2FQMdg7sL0qbR7GHuNk%2BVLRBdMlcmVvf3%2FP5DnVYJeAEVij6pQkiX94Ql4dUsDc2%2FZsYo1ffgsU5PrSjcErzlKa%2BV2491I3hHMyHPImkz2DVrAXmQ2dGsMDz3ZOAzEDB%2FJSed9WUkpsf6gs74q491JEYGByOCuVqSTLjpjFvqxai1SIU8sLU7jAmbrZXDFiYm46Z6ztb02Yd4uVZxnDWDZFtO31Q9KLuxhPO5wVl%2BSl3PQH4T7E%2FDxlxFku7FJHWZYccTtQAir4D0HSNYGIgxiwnMRoCF%2FltZ%2BYDaoX9hp25bevvqsIY0lV4uZ1F%2BIwzx9KXgdu6ViY9XEkLVyArZmltvzbFpCblwe%2BzfTJy%2FU9iv693qvdOFIaqUtFAAb%2FNs1OcwptDQOC239HX1llCt6ixnN3nAU6jWJzbYaUMotkZoj%2FNn7N%2BskrkGJFXcxKk1WqJkf24N6Q2O%2BV3Zs02d5rTuIhgYXNDIFEDblYZKVN3tKSSIH00ln40exdEWUH3PCtW0ewL%2FNqspNo4Axvy%2Bj9ZWfXus4tlJTaXlZBW74b9FRXcsQngxqizs073DWGtapNotJs%2BS%2Fa9uegoJGLZA
--------------------------------- I GOT
-Exchange-Transport-Crosstenantheadersstamped=SY4P282MB1788&X-Ms-Has-Attach=&X-Ms-Office365-Filtering-Correlation-Id=377b0ee6-98a7-40b2-6e5d-08db4b6c15d8&X-Ms-Publictraffictype=Email&X-Ms-Tnef-Correlator=&X-Ms-Traffictypediagnostic=SYBP282MB2882%3AEE_%7CSY4P282MB1788%3AEE_&X-Originatororg=mydomain.com&body-html=%3Chtml%3E%0D%0A%3Chead%3E%0D%0A%3Cmeta+http-equiv%3D%22Content-Type%22+content%3D%22text%2Fhtml%3B+charset%3Dus-ascii%22%3E%0D%0A%3Cstyle+type%3D%22text%2Fcss%22+style%3D%22display%3Anone%3B%22%3E+P+%7Bmargin-top%3A0%3Bmargin-bottom%3A0%3B%7D+%3C%2Fstyle%3E%0D%0A%3C%2Fhead%3E%0D%0A%3Cbody+dir%3D%22ltr%22%3E%0D%0A%3Cdiv+style%3D%22font-family%3A+Calibri%2C+Arial%2C+Helvetica%2C+sans-serif%3B+font-size%3A+12pt%3B+color%3A+rgb%280%2C+0%2C+0%29%3B%22+class%3D%22elementToProof%22%3E%0D%0AThis+is+a+test%3C%2Fdiv%3E%0D%0A%3Cdiv+id%3D%22appendonsend%22%3E%3C%2Fdiv%3E%0D%0A%3Chr+style%3D%22display%3Ainline-block%3Bwidth%3A98%25%22+tabindex%3D%22-1%22%3E%0D%0A%3Cdiv+id%3D%22divRplyFwdMsg%22+dir%3D%22ltr%22%3E%3Cfont+face%3D%22Calibri%2C+sans-serif%22+style%3D%22font-size%3A11pt%22+color%3D%22%23000000%22%3E%3Cb%3EFrom%3A%3C%2Fb%3E+ZeXtras+Suite+%26lt%3Badmin%40machhiato.com%26gt%3B%3Cbr%3E%0D%0A%3Cb%3ESent%3A%3C%2Fb%3E+Saturday%2C+29+April+2023+10%3A00+AM%3Cbr%3E%0D%0A%3Cb%3ETo%3A%3C%2Fb%3E+kenshi.hajime%40mydomain.com+%26lt%3Bkenshi.hajime%40mydomain.com%26gt%3B%3Cbr%3E%0D%0A%3Cb%3ESubject%3A%3C%2Fb%3E+Zextras+Suite+License+Warning+From+server+zimbra.machhiato.com%3C%2Ffont%3E%0D%0A%3Cdiv%3E%26nbsp%3B%3C%2Fdiv%3E%0D%0A%3C%2Fdiv%3E%0D%0A%3Cdiv+class%3D%22BodyFragment%22%3E%3Cfont+size%3D%222%22%3E%3Cspan+style%3D%22font-size%3A11pt%3B%22%3E%0D%0A%3Cdiv+class%3D%22PlainText%22%3EThis+is+an+automated+notification+from+Zextras+Suite.%3Cbr%3E%0D%0AThe+following+warning%28s%29+have+been+detected.%3Cbr%3E%0D%0A%3Cbr%3E%0D%0AYour+Zextras+Suite+License+expires+in+1+days.%3Cbr%3E%0D%0A%3Cbr%3E%0D%0APlease+make+sure+you+either+obtain+a+new+license+or+extend+
--------------------------------- I GOT
the+duration+of+the+current+one+in+order+to+avoid+service+disruption.%0D%0A%3Cbr%3E%0D%0A%3Cbr%3E%0D%0AIf+your+license+expires+all+Zextras+Suite+licenses+paid+will+be+forcibly+disabled.%3Cbr%3E%0D%0A%3C%2Fdiv%3E%0D%0A%3C%2Fspan%3E%3C%2Ffont%3E%3C%2Fdiv%3E%0D%0A%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E%0D%0A&body-plain=This+is+a+test%0D%0A________________________________%0D%0AFrom%3A+ZeXtras+Suite+%3Cadmin%40machhiato.com%3E%0D%0ASent%3A+Saturday%2C+29+April+2023+10%3A00+AM%0D%0ATo%3A+kenshi.hajime%40mydomain.com+%3Ckenshi.hajime%40mydomain.com%3E%0D%0ASubject%3A+Zextras+Suite+License+Warning+From+server+zimbra.machhiato.com%0D%0A%0D%0AThis+is+an+automated+notification+from+Zextras+Suite.%0D%0AThe+following+warning%28s%29+have+been+detected.%0D%0A%0D%0AYour+Zextras+Suite+License+expires+in+1+days.%0D%0A%0D%0APlease+make+sure+you+either+obtain+a+new+license+or+extend+the+duration+of+the+current+one+in+order+to+avoid+service+disruption.%0D%0A%0D%0AIf+your+license+expires+all+Zextras+Suite+licenses+paid+will+be+forcibly+disabled.%0D%0A&domain=apps.mydomain.com&from=Martin+Wong+%3Cmw%40mydomain.com%3E&message-headers=%5B%5B%22Received%22%2C%22from+AUS01-ME3-obe.outbound.protection.outlook.com+%28mail-me3aus01on2104.outbound.protection.outlook.com+%5B40.107.108.104%5D%29+by+e393140286f2+with+SMTP+id+%3Cundefined%3E+%28version%3DTLS1.2%2C+cipher%3DTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256%29%3B+Wed%2C+03+May+2023+00%3A19%3A43+GMT%22%5D%2C%5B%22Received%22%2C%22from+SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM+%282603%3A10c6%3A10%3A155%3A%3A7%29+by+SY4P282MB1788.AUSP282.PROD.OUTLOOK.COM+%282603%3A10c6%3A10%3Ac4%3A%3A15%29+with+Microsoft+SMTP+Server+%28version%3DTLS1_2%2C+cipher%3DTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384%29+id+15.20.6363.21%3B+Wed%2C+3+May+2023+00%3A19%3A39+%2B0000%22%5D%2C%5B%22Received%22%2C%22from+SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM+%28%5Bfe80%3A%3Af862%3Ad4c6%3A60d9%3Ae4b2%5D%29+by+SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM+%28%5Bfe80%3A%3Af862%3Ad
--------------------------------- I GOT
4c6%3A60d9%3Ae4b2%256%5D%29+with+mapi+id+15.20.6340.031%3B+Wed%2C+3+May+2023+00%3A19%3A39+%2B0000%22%5D%2C%5B%22X-Envelope-From%22%2C%22mw%40mydomain.com%22%5D%2C%5B%22X-Mailgun-Incoming%22%2C%22Yes%22%5D%2C%5B%22Arc-Seal%22%2C%22i%3D1%3B+a%3Drsa-sha256%3B+s%3Darcselector9901%3B+d%3Dmicrosoft.com%3B+cv%3Dnone%3B+b%3DhX81X9wwTgAUMMwae1Y7VnCJhIy%2BHoPg2rnSocmWAEDmQRsvWjYkKF50CNlkSUiGfA3IXk%2BeWis777osaoJ4jbGo3oLFFhAaA4RLSaw%2Fke4nKUhrIZuC2yx4K907PyJJnQQUUn9gOUg1dWL3J2Rxd%2BA7R34hez1IHKLnYXbAjpawOoriwZE4SCTcwEJ3PF10g7d5IaxxumC3mdgbK6gPwpd5sifScwhilTMBjwHkRPeMT21Qt1IYiAncYzhxj%2B4nb9MLvQqNt4hsRoxZkY%2BpGl97BKKnL95SCRzdDHvZSV7Lyc9c2EQqwEyIis%2FCvXtjbEiLgX%2BMSom5YrNIaCX6cw%3D%3D%22%5D%2C%5B%22Arc-Message-Signature%22%2C%22i%3D1%3B+a%3Drsa-sha256%3B+c%3Drelaxed%2Frelaxed%3B+d%3Dmicrosoft.com%3B+s%3Darcselector9901%3B+h%3DFrom%3ADate%3ASubject%3AMessage-ID%3AContent-Type%3AMIME-Version%3AX-MS-Exchange-AntiSpam-MessageData-ChunkCount%3AX-MS-Exchange-AntiSpam-MessageData-0%3AX-MS-Exchange-AntiSpam-MessageData-1%3B+bh%3D7ah5YhW08g7LgS0I1ZB2QBSkCoP9mO4fbEW2iRVvuso%3D%3B+b%3DNdlid9%2BqWShfFXWMehOYywAITfOc%2BYEnAdW9CnmxAMoiIr37amcP50szZvm9oXdrpxUEmw3nD%2Fr67VhvjY28IO7uVA4vGjdsp0BGEb4f7c9xnhHY%2B%2BzTB3VEs0T8csAXo8gO%2BOx%2BjS95Mr44KHuCkFEhNvS8oUCo3x9tcFMfQfPoLR6jmmodgdpEC%2F626uLx6Dl6A6%2BZaUFg36xrdIidoiSU%2F%2FyjlYGQDmU%2FZl%2BQZTaFPuKppvVr6Po%2F2oX7XlklFFXQ0vOIi1G%2FnU%2FYIgC8i%2FaCx8X2P3hX16%2FJXKGrueWZDszQE5PxtBqjYBjyzUzyjb5vRT2HHEtmBFSpkMq9%2BA%3D%3D%22%5D%2C%5B%22Arc-Authentication-Results%22%2C%22i%3D1%3B+mx.microsoft.com+1%3B+spf%3Dpass+smtp.mailfrom%3Dmydomain.com%3B+dmarc%3Dpass+action%3Dnone+header.from%3Dmydomain.com%3B+dkim%3Dpass+header.d%3Dmydomain.com%3B+arc%3Dnone%22%5D%2C%5B%22From%22%2C%22Martin+Wong+%3Cmw%40mydomain.com%3E%22%5D%2C%5B%22To%22%2C%22%5C%22csteam-test%40apps.mydomain.com%5C%22+%3Ccsteam-test%40apps.mydomain.com%3E%22%5D%2C%5B%22Subject%22%2C%22Fw%3A+Zextras+Suite+License+Warning+From+server+zimbra.
--------------------------------- I GOT
machhiato.com%22%5D%2C%5B%22Thread-Topic%22%2C%22Zextras+Suite+License+Warning+From+server+zimbra.machhiato.com%22%5D%2C%5B%22Thread-Index%22%2C%22AQHZei2TdaSoiiGjqEqZwTmHdyTL9K9HtXqz%22%5D%2C%5B%22Date%22%2C%22Wed%2C+3+May+2023+00%3A19%3A39+%2B0000%22%5D%2C%5B%22Message-Id%22%2C%22%3CSYBP282MB2882BE98B1F239B13AF45915AD6C9%40SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM%3E%22%5D%2C%5B%22References%22%2C%22%3C57214212.88122.1682726400093.JavaMail.zimbra%40zimbra.machhiato.com%3E%22%5D%2C%5B%22In-Reply-To%22%2C%22%3C57214212.88122.1682726400093.JavaMail.zimbra%40zimbra.machhiato.com%3E%22%5D%2C%5B%22Accept-Language%22%2C%22en-AU%2C+en-US%22%5D%2C%5B%22Content-Language%22%2C%22en-AU%22%5D%2C%5B%22X-Ms-Has-Attach%22%2C%22%22%5D%2C%5B%22X-Ms-Tnef-Correlator%22%2C%22%22%5D%2C%5B%22Suggested_attachment_session_id%22%2C%2292f180dd-dd95-010c-292a-680b2c024eb8%22%5D%2C%5B%22Authentication-Results%22%2C%22dkim%3Dnone+%28message+not+signed%29+header.d%3Dnone%3Bdmarc%3Dnone+action%3Dnone+header.from%3Dmydomain.com%3B%22%5D%2C%5B%22X-Ms-Publictraffictype%22%2C%22Email%22%5D%2C%5B%22X-Ms-Traffictypediagnostic%22%2C%22SYBP282MB2882%3AEE_%7CSY4P282MB1788%3AEE_%22%5D%2C%5B%22X-Ms-Office365-Filtering-Correlation-Id%22%2C%22377b0ee6-98a7-40b2-6e5d-08db4b6c15d8%22%5D%2C%5B%22X-Ms-Exchange-Senderadcheck%22%2C%221%22%5D%2C%5B%22X-Ms-Exchange-Antispam-Relay%22%2C%220%22%5D%2C%5B%22X-Microsoft-Antispam%22%2C%22BCL%3A0%3B%22%5D%2C%5B%22X-Microsoft-Antispam-Message-Info%22%2C%22T3UOzYpaz547zL3pBJb1thc5x7PFTK5JCWVINfmenwoXqt7aZG%2FuSZK2tRJNEkjsF78ptNsYftJyx6yIDfNfbjtyHTp6hO3dfJsSoI2whgy5JIhn92aimXOk0TIVWLcViulgXRoC7mLeweVbFrWk6qHnjmIjFfrMEOAsNBvQb6c05sJuBI1SVIDnzlXVxEilrhpuHUMpsG0wQQafYm%2BwJmXInGyXMq26XT%2Btj3P3udV6bOw17kiLnTNQ9vspSfyT%2B2LUvU3yxoQNI4kAwXN7k77%2BIpOgoyw0VtvB38e0IQ4hvl72phiIVz7Hfhzmn%2Bm1egscq8RSQRODHKmV0gISZ6QES1TQYhyAENraWHCqlL%2FtqLCREmw9Leyo%2Fcd1aVy8WtB8y%2F19PlWdLR8oXHwX8IbNu1XpBeAUM5IjFbuP0%2B3di4yaRT9mzqfOC3Xp5f7HRGaXPTzTRFA2xghvERSoq40%2FvxQBT%2BaqootHyS970YfzEwcaMNJcZ
--------------------------------- I GOT
wh6dUpdeVojQ2%2BHqUnFFDwz5TMJemJIyiQPKCU2cu57cGU6R4Ul3N4HlzaSdG5OetgSx0K2BfJdK5rB835jHWuBDlEYieo3OV1dbrwuRk4b1LtsNyZ8YiA%2Bant1Vi6zEXTb6H1WFJgP%22%5D%2C%5B%22X-Forefront-Antispam-Report%22%2C%22CIP%3A255.255.255.255%3BCTRY%3A%3BLANG%3Aen%3BSCL%3A1%3BSRV%3A%3BIPV%3ANLI%3BSFV%3ANSPM%3BH%3ASYBP282MB2882.AUSP282.PROD.OUTLOOK.COM%3BPTR%3A%3BCAT%3ANONE%3BSFS%3A%2813230028%29%28346002%29%28376002%29%2834096005%29%28366004%29%28136003%29%2839830400003%29%28396003%29%28451199021%29%28122000001%29%2838100700002%29%284744005%29%282906002%29%288936002%29%285660300002%29%2852536014%29%288676002%29%2833656002%29%2886362001%29%2838070700005%29%2855016003%29%2871200400001%29%287696005%29%28478600001%29%2819627405001%29%28186003%29%289686003%29%286506007%29%2826005%29%2853546011%29%2883380400001%29%2866946007%29%2876116006%29%2866446008%29%2866556008%29%2866476007%29%2864756008%29%2841300700001%29%286916009%29%28316002%29%3BDIR%3AOUT%3BSFP%3A1102%3B%22%5D%2C%5B%22X-Ms-Exchange-Antispam-Messagedata-Chunkcount%22%2C%221%22%5D%2C%5B%22X-Ms-Exchange-Antispam-Messagedata-0%22%2C%22JpRLd5R2514aeJS1sgEaDhNVij2yiLXMybWbZzbGM%2BaA3n%2BSVcvtWtZpnlflFx%2Bw8frCq90aUXWNPwQujgRcViADvdPEDDtSnhxQD3PDLmmiz3J8IvPUvnAYbTR%2BrdbZM0gpmomGH9XCFLv6OrWKApyAjckNCBFvC8TAv7t0VybHYOs06EQl8sYK4q6JHsipWcF%2BAHZMoxsg6fXGRTwuKki9i%2Fht9aVS7aYLd%2Br11G%2F5ezxh2iZE58KFh63%2Bnge20rhw8y5dcF4BBbCPAZfW6VlE5IRE%2FiO5l7twAy7lF15SYH9wpc1ZWC41loG6o9TQKEHd4LyxPSNJeM31CNa0UMHOXpz3y2lsMA98tfRbJ%2BTflnUsZhvhPgYwSQn3g96xBwUze2EOt3qfAgUAskT%2B0%2F5aHkQdBqQLlIE3UEuYrckFl5NgJsFeFfJvy3UC3dw2%2Bq4Zc%2BTFNMcMEI1BwV5A3r0NXkDifjqWaRFIBm%2FLKYmp8xBXW7LM%2FBLrJSJ61YReFCRH0DkrZNLJAdSDrbmDclkE%2B6Eq%2BVXO1sJgW%2FxkOZggtdAITOrPN%2FQLar%2Bmt0fffMwtZEOvdWf%2BWv%2F6N9D7OiMrdAipmGredMobEBEr8HT%2BNDiSQQbCV4kjsUFm4VlWPnBAKuY3MXCAiuHAk4MP%2BqpZRzhItoaGH78OIJlZc0iOkom90smYryG9TGJM1062GdyBfxZLmNQdHTRZJcuiEhu%2FAhZH%2FQMdg7sL0qbR7GHuNk%2BVLRBdMlcmVvf3%2FP5DnVYJeAEVij6pQkiX94Ql4dUsDc2%2FZsYo1ffgsU5PrSjcErzlKa%2BV2491I3hHMyHPImkz2DVrAXmQ2dGsMDz3ZOAzEDB%
--------------------------------- I GOT
2FJSed9WUkpsf6gs74q491JEYGByOCuVqSTLjpjFvqxai1SIU8sLU7jAmbrZXDFiYm46Z6ztb02Yd4uVZxnDWDZFtO31Q9KLuxhPO5wVl%2BSl3PQH4T7E%2FDxlxFku7FJHWZYccTtQAir4D0HSNYGIgxiwnMRoCF%2FltZ%2BYDaoX9hp25bevvqsIY0lV4uZ1F%2BIwzx9KXgdu6ViY9XEkLVyArZmltvzbFpCblwe%2BzfTJy%2FU9iv693qvdOFIaqUtFAAb%2FNs1OcwptDQOC239HX1llCt6ixnN3nAU6jWJzbYaUMotkZoj%2FNn7N%2BskrkGJFXcxKk1WqJkf24N6Q2O%2BV3Zs02d5rTuIhgYXNDIFEDblYZKVN3tKSSIH00ln40exdEWUH3PCtW0ewL%2FNqspNo4Axvy%2Bj9ZWfXus4tlJTaXlZBW74b9FRXcsQngxqizs073DWGtapNotJs%2BS%2Fa9uegoJGLZAQvM3PpYYwZAUZUcS3mYgACMcl5HIOla1Krrdl5f6b%2FiwGEiA9aPHIarDQyGNhJ%2BnidbE3I03cq0ObBO7A5wBdyHHQNsXFsMeFtS5LqahauVyvQnzJQPNaGqm0afdRDgkKNdz2Jp8NXsFnnre0EgPksMhWW8DL8OeopS54fkqyckj2MTOV6vVGDbM3KSe3TLBml9xwzsJkDlKO7%2B%2BRzZd5gRH2C6KCqbNRVDACifoz1U2MdpkJK%2F%2Blk7sIvFs7HXLC28r5iVSj7Ain6MH%22%5D%2C%5B%22Content-Type%22%2C%22multipart%2Falternative%3B+boundary%3D%5C%22_000_SYBP282MB2882BE98B1F239B13AF45915AD6C9SYBP282MB2882AUSP_%5C%22%22%5D%2C%5B%22Mime-Version%22%2C%221.0%22%5D%2C%5B%22X-Originatororg%22%2C%22mydomain.com%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Authas%22%2C%22Internal%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Authsource%22%2C%22SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Network-Message-Id%22%2C%22377b0ee6-98a7-40b2-6e5d-08db4b6c15d8%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Originalarrivaltime%22%2C%2203+May+2023+00%3A19%3A39.7853+%28UTC%29%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Fromentityheader%22%2C%22Hosted%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Id%22%2C%22878ba29f-aa36-4749-a662-958ebb7951f1%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Mailboxtype%22%2C%22HOSTED%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Userprincipalname%22%2C%22Yy%2BB4BUwI3LNk%2F%2BpG1w7ajWnjrmCPsIZuk8buaDTAJkENcPK3PHpY8QMM%2FsrxGHW6tLU%2BSBS5jgFId8IcSm6Ag%3D%3D%22%5D%2C%5B%22X-Ms-Exchange-Transport-Crosstenantheadersstamped%22%2C%22SY4P282MB1788%22%5D%5D&message-url=https%3A%2F%2Fstorage-us-east4.api.mailgun.net%2Fv3%2Fdomains%2Fapps.mydomain.com%2Fme
--------------------------------- I GOT
ssages%2FBAABAAVDfSi6hEjsNNpPHJshTlBCfi7yZA%3D%3D&recipient=csteam-test%40apps.mydomain.com&sender=mw%40mydomain.com&signature=64c0eed415c1de036ac3a21814ef7daca6558f1363b5428db6676dfff66446ca&stripped-html=%3Chtml%3E%3Chead%3E%0A%0A%3C%2Fhead%3E%0A%3Cbody+dir%3D%22ltr%22%3E%0A%3Cdiv+style%3D%22font-family%3A+Calibri%2C+Arial%2C+Helvetica%2C+sans-serif%3B+font-size%3A+12pt%3B+color%3A+rgb%280%2C+0%2C+0%29%3B%22+class%3D%22elementToProof%22%3E%0AThis+is+a+test%3C%2Fdiv%3E%0A%3Cdiv+id%3D%22appendonsend%22%3E%3C%2Fdiv%3E%0A%3Chr+style%3D%22display%3Ainline-block%3Bwidth%3A98%25%22+tabindex%3D%22-1%22%3E%0A%3C%2Fbody%3E%3C%2Fhtml%3E&stripped-text=This+is+a+test&subject=Fw%3A+Zextras+Suite+License+Warning+From+server+zimbra.machhiato.com&timestamp=1683073183&token=a0ecb71a0f3b7b7763d6650b7d4babd32e60b5f1d85272002cternative%3B+boundary%3D%5C%22_000_SYBP282MB2882BE98B1F239B13AF45915AD6C9SYBP282MB2882AUSP_%5C%22%22%5D%2C%5B%22Mime-Version%22%2C%221.0%22%5D%2C%5B%22X-Originatororg%22%2C%22mydomain.com%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Authas%22%2C%22Internal%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Authsource%22%2C%22SYBP282MB2882.AUSP282.PROD.OUTLOOK.COM%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Network-Message-Id%22%2C%22377b0ee6-98a7-40b2-6e5d-08db4b6c15d8%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Originalarrivaltime%22%2C%2203+May+2023+00%3A19%3A39.7853+%28UTC%29%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Fromentityheader%22%2C%22Hosted%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Id%22%2C%22878ba29f-aa36-4749-a662-958ebb7951f1%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Mailboxtype%22%2C%22HOSTED%22%5D%2C%5B%22X-Ms-Exchange-Crosstenant-Userprincipalname%22%2C%22Yy%2BB4BUwI3LNk%2F%2BpG1w7ajWnjrmCPsIZuk8buaDTAJkENcPK3PHpY8QMM%2FsrxGHW6tLU%2BSBS5jgFId8IcSm6Ag%3D%3D%22%5D%2C%5B%22X-Ms-Exchange-Transport-Crosstenantheadersstamped%22%2C%22SY4P282MB1788%22%5D%5D&message-url=https%3A%2F%2Fstorage-us-east4.api.mailgun.net%2Fv3%2Fdomains%2Fapps.mydomain.com%2Fme
benubi
Enthusiast
Enthusiast
Posts: 215
Joined: Tue Mar 29, 2005 4:01 pm

Re: Convert application/x-www-form-urlencoded to variables

Post by benubi »

The Atomic Webserver is only a Demo, not a fully functioning web server.

The form you uploaded got split into multiple packets. Normally browsers send the header in one packet or sequence, at least they did last time I checked and now they don't :( . The content following the header is often fragmented into multiple packets simply because it's too long to hold in one alone, like the output you gave shows.

You'd have to imagine a way to concatenate those packets into one big string, and then to use the procedure I posted above. Rename the var() Map to _POST() and you have what you want ;)

The form-data you received is not multipart... implementing a multipart reader is more complicated than for url-encoded form data, too.

If you want to write a complete web server you can be sure that it will be time consuming, you would also have to start from scratch since the Atomic webserver code isn't suitable and it doesn't implement HTTPS encryption. Have you looked into the CGI (and FastCGI) library? If you have already a web server running this may be the best choice for you.
infratec
Always Here
Always Here
Posts: 7579
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: Convert application/x-www-form-urlencoded to variables

Post by infratec »

You can check the content-length and read in the following packets until the length is reached.
This is not multi-form :wink:
infratec
Always Here
Always Here
Posts: 7579
Joined: Sun Sep 07, 2008 12:45 pm
Location: Germany

Re: Convert application/x-www-form-urlencoded to variables

Post by infratec »

lesserpanda
User
User
Posts: 65
Joined: Tue Feb 11, 2020 7:50 am

Re: Convert application/x-www-form-urlencoded to variables

Post by lesserpanda »

benubi wrote: Wed May 03, 2023 7:05 pm
If you want to write a complete web server you can be sure that it will be time consuming, you would also have to start from scratch since the Atomic webserver code isn't suitable and it doesn't implement HTTPS encryption. Have you looked into the CGI (and FastCGI) library? If you have already a web server running this may be the best choice for you.
I understand the CGI one. I tried it and it works ok. Just have issues handling this posted multipart variable. Was looking for an existing library but guess there isn't one. I might try to make one once I wrap my head around it.
Post Reply