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!
Convert application/x-www-form-urlencoded to variables
-
- User
- Posts: 65
- Joined: Tue Feb 11, 2020 7:50 am
Re: Convert application/x-www-form-urlencoded to variables
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.
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.
Re: Convert application/x-www-form-urlencoded to variables
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.
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")
-
- User
- Posts: 65
- Joined: Tue Feb 11, 2020 7:50 am
Re: Convert application/x-www-form-urlencoded to variables
@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.
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×tamp=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
Re: Convert application/x-www-form-urlencoded to variables
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.
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

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.
Re: Convert application/x-www-form-urlencoded to variables
You can check the content-length and read in the following packets until the length is reached.
This is not multi-form
This is not multi-form

-
- User
- Posts: 65
- Joined: Tue Feb 11, 2020 7:50 am
Re: Convert application/x-www-form-urlencoded to variables
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.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.