Hi,
I need asynchronous to fix the missing timeout.
But if asynchronous is used, the string is not correctly transmitted.
Code:
EnableExplicit
Procedure Server(Dummy.i)
Protected Server.i, Client.i, RcvLen.i, Pos.i, Rcv$, *Buffer
Server = CreateNetworkServer(#PB_Any, 3333)
If Server
*Buffer = AllocateMemory(10240)
If *Buffer
Repeat
Select NetworkServerEvent()
Case #PB_NetworkEvent_Data
Debug "Data"
CLient = EventClient()
RcvLen = ReceiveNetworkData(Client, *Buffer, MemorySize(*Buffer))
If RcvLen
Debug PeekS(*Buffer, RcvLen, #PB_UTF8|#PB_ByteLength)
ShowMemoryViewer(*Buffer, RcvLen)
Delay(5000)
Debug "Sending answer"
SendNetworkString(Client, "HTTP/1.1 200 Ok" + #CRLF$ + "Content-Length: 0" + #CRLF$ + #CRLF$)
EndIf
Case #PB_NetworkEvent_None
Delay(10)
EndSelect
ForEver
FreeMemory(*Buffer)
EndIf
EndIf
EndProcedure
Define Test$, *Test, HTTPRequest.i, Progress.i, Timeout.i, Starttime.i
Define NewMap Header$()
InitNetwork()
CreateThread(@Server(), #Null)
Test$ = "Hello world!"
Header$("Content-Type") = "plaintext"
Debug "Tx 1"
HTTPRequest = HTTPRequest(#PB_HTTP_Post, "http://localhost:3333", Test$, 0, Header$())
If HTTPRequest
FinishHTTP(HTTPRequest)
EndIf
Debug ""
Debug "Tx 2"
HTTPRequest = HTTPRequest(#PB_HTTP_Post, "http://localhost:3333", Test$, #PB_HTTP_Asynchronous, Header$())
If HTTPRequest
Timeout = 3
Starttime = Date()
Repeat
Progress = HTTPProgress(HTTPRequest)
Select Progress
Case #PB_HTTP_Success
Break
Case #PB_HTTP_Failed
Break
Case #PB_HTTP_Aborted
Break
Default
Delay(10)
If Date() - Starttime > Timeout
Debug "Timeout"
AbortHTTP(HTTPRequest)
Break
EndIf
EndSelect
ForEver
FinishHTTP(HTTPRequest)
EndIf
If I use HTTPRequestMemory() it works, if I don't free the buffer until the request is finished.
PB 5.70 x86 on win 10 x64
@Fred:
Do you use CURLOPT_COPYPOSTFIELDS?
Else the buffer has to be preserverd.
Bernd