curl

Free and easy-to-use client-side URL transfer library supporting almost 
every protocol.

Website: https://curl.haxx.se/libcurl/
Platforms supported: Win32, Linux, DOS
Headers to include: curl.bi
Header version: 7.44.0
Examples: in examples/network/curl/

Example
	'' Curl HTTP Get example

	#include Once "curl.bi"
	#include Once "crt/string.bi"

	'' this callback will be called when any data is received
	Private Function write_callback cdecl _
	   ( _
	      ByVal buffer As Byte Ptr, _
	      ByVal size As Integer, _
	      ByVal nitems As Integer, _
	      ByVal outstream As Any Ptr _
	   ) As Integer

	   Static As ZString Ptr zstr = 0
	   Static As Integer maxbytes = 0

	   Dim As Integer bytes = size * nitems

	   '' current zstring buffer too small?
	   If( maxbytes < bytes ) Then
	      zstr = Reallocate( zstr, bytes + 1 )
	      maxbytes = bytes
	   End If

	   '' "buffer" is not null-terminated, so we must dup it and add the null-term
	   memcpy( zstr, buffer, bytes )
	   zstr[bytes] = 0

	   '' just print it..
	   Print *zstr

	   Return bytes
	End Function

	   '' init
	   Dim As CURL Ptr curl = curl_easy_init( )
	   If( curl = 0 ) Then
	      End 1
	   End If

	   '' set url and callback
	   curl_easy_setopt( curl, CURLOPT_URL, "freebasic.net" )
	   curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, @write_callback )

	   '' execute..
	   curl_easy_perform( curl )

	   '' shutdown
	   curl_easy_cleanup( curl )

