Code: Select all
IncludeFile "libcurl.pbi" ; https://github.com/deseven/pbsamples/tree/master/crossplatform/libcurl
CompilerIf #PB_Compiler_IsMainFile
EnableExplicit
CompilerEndIf
Global *ReceiveHTTPToMemoryBuffer, ReceiveHTTPToMemoryBufferPtr.i
ProcedureC ReceiveHTTPWriteToMemoryFunction(*ptr, Size.i, NMemB.i, *Stream)
Protected SizeProper.i = Size & 255
Protected NMemBProper.i = NMemB
If *ReceiveHTTPToMemoryBuffer = 0
*ReceiveHTTPToMemoryBuffer = AllocateMemory(SizeProper * NMemBProper)
Else
*ReceiveHTTPToMemoryBuffer = ReAllocateMemory(*ReceiveHTTPToMemoryBuffer, MemorySize(*ReceiveHTTPToMemoryBuffer) + SizeProper * NMemBProper)
EndIf
CopyMemory(*ptr, *ReceiveHTTPToMemoryBuffer + ReceiveHTTPToMemoryBufferPtr, SizeProper * NMemBProper)
ReceiveHTTPToMemoryBufferPtr + SizeProper * NMemBProper
ProcedureReturn SizeProper * NMemBProper
EndProcedure
Procedure.i ReceiveHTTPToMemory(URL$, Proxy$="")
Protected *Buffer, curl.i, Timeout.i, res.i
If Len(URL$)
curl = curl_easy_init()
If curl
Timeout = 3
curl_easy_setopt(curl, #CURLOPT_URL, str2curl(URL$))
curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0)
curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0)
curl_easy_setopt(curl, #CURLOPT_HEADER, @"")
curl_easy_setopt(curl, #CURLOPT_TIMEOUT, Timeout)
If Len(Proxy$)
curl_easy_setopt(curl, #CURLOPT_PROXY, @proxy$)
EndIf
curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @ReceiveHTTPWriteToMemoryFunction())
res = curl_easy_perform(curl)
If res = #CURLE_OK
*Buffer = AllocateMemory(ReceiveHTTPToMemoryBufferPtr)
If *Buffer
CopyMemory(*ReceiveHTTPToMemoryBuffer, *Buffer, ReceiveHTTPToMemoryBufferPtr)
FreeMemory(*ReceiveHTTPToMemoryBuffer)
*ReceiveHTTPToMemoryBuffer = #Null
ReceiveHTTPToMemoryBufferPtr = 0
EndIf
EndIf
curl_easy_cleanup(curl)
EndIf
EndIf
ProcedureReturn *Buffer
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
Define *Buffer, Proxy$
InitNetwork()
Proxy$ = InputRequester("ProxyServer", "Do you use a ProxyServer? Then enter the full url:", "")
*Buffer = ReceiveHTTPToMemory("http://www.purebasic.fr/english/index.php", Proxy$)
If *Buffer
ShowMemoryViewer(*Buffer, MemorySize(*Buffer))
FreeMemory(*Buffer)
EndIf
CompilerEndIf
Bernd