Code: Select all
Procedure.i ReceiveHTTPMemory(URL.s, _Data$, _Cookie$, BufferSize = 4096, Timeout = 5000)
Protected Connection, Time, Time2, Event, Size, Size2, SizeAll, pos
Protected.s Server
Protected String$
Protected *Mem, *Buffer, *Mem2
Size = 1
If LCase(Left(URL, 7)) <> "http://" : URL = "http://" + URL : EndIf
Server = GetURLPart(URL, #PB_URL_Site)
If Server = "" : ProcedureReturn #False : EndIf
;Connection = OpenNetworkConnection(Server, 80, #PB_Network_TCP) ;original line which works
Connection = OpenNetworkConnection("127.0.0.1", 9150, #PB_Network_TCP) ; my change, doesn't work
If Not Connection : ProcedureReturn #False : EndIf
If BufferSize <= 0 : BufferSize = 4096 : EndIf
*Buffer = AllocateMemory(BufferSize)
If Not *Buffer : ProcedureReturn #False : EndIf
;Build header
If _Data$ <> ""
String$ + "POST " + URL + " HTTP/1.1" + #CRLF$
String$ + "Content-Length: " + Str(Len(_Data$)) + #CRLF$
Else
String$ + "GET " + URL + " HTTP/1.1" + #CRLF$
EndIf
String$ + "Host: " + Server + #CRLF$
If _Cookie$ <> ""
String$ + "Cookie: " + _Cookie$ + #CRLF$
EndIf
String$ + "Content-Type: application/x-www-form-urlencoded" + #CRLF$
String$ + "Connection: close" + #CRLF$
String$ + #CRLF$
; header is finished
String$ + _Data$ + #CRLF$
;SendNetworkString(Connection, "GET " + URL + " HTTP/1.0" + #LFCR$ + #LFCR$)
SendNetworkString(Connection, String$)
Time = ElapsedMilliseconds()
Repeat
Event = NetworkClientEvent(Connection)
If Event = #PB_NetworkEvent_Data
Repeat
Size = ReceiveNetworkData(Connection, *Buffer, BufferSize)
If Size > 0
Time = ElapsedMilliseconds()
SizeAll + Size
*Mem = ReAllocateMemory(*Mem, SizeAll)
If *Mem
CopyMemory(*Buffer, *Mem + (SizeAll - Size), Size)
Else
CloseNetworkConnection(Connection)
FreeMemory(*Buffer)
ProcedureReturn #False
EndIf
EndIf
Until Size <= 0
EndIf
Time2 = ElapsedMilliseconds() - Time
Until Time2 > Timeout Or Size <= 0
CloseNetworkConnection(Connection)
FreeMemory(*Buffer)
If Time2 > Timeout
If *Mem : FreeMemory(*Mem) : EndIf
ProcedureReturn #False
EndIf
pos = FindString(PeekS(*mem, -1, #PB_UTF8), #CRLF$ + #CRLF$, 1) - 1
pos = Len(#CRLF$ + #CRLF$) + pos
Size2 = MemorySize(*Mem) - pos
*Mem2 = AllocateMemory(Size2)
If *Mem2
CopyMemory(*Mem + pos, *Mem2, Size2)
FreeMemory(*Mem)
ProcedureReturn *Mem2
EndIf
FreeMemory(*Mem)
ProcedureReturn #False
EndProcedure
InitNetwork()
MemPtr = ReceiveHTTPMemory("http://forums.purebasic.com", "", "")
If MemPtr <> 0
Debug MemorySize(MemPtr)
Debug PeekS(MemPtr)
Else
Debug "failed"
EndIf


