B4R Library [module] rHttpUtils2 - Http Client

Discussion in 'B4R Libraries' started by Erel, Jan 2, 2017.

  1. Erel

    Erel Administrator Staff Member Licensed User

    The HttpJob module implements an http client. It is a simplified version of B4X HttpUtils2.

    Example:
    Code:
    Sub Process_Globals
       
    Public Serial1 As Serial
       
    Private wifi As ESP8266WiFi
    End Sub

    Private Sub AppStart
       Serial1.Initialize(
    115200)
       
    Log("AppStart")
       
    If wifi.Connect("dlink"Then
         
    Log("Connected to router.")
       
    Else
         
    Log("Failed to connect to router.")
         
    Return
       
    End If
       
    HttpJob.Initialize("Example")
       
    HttpJob.Download("https://www.example.com")
    End Sub


    Sub JobDone (Job As JobResult)
       
    Log("*******************************")
       
    Log("JobName: ", Job.JobName)
       
    If Job.Success Then
         
    Dim bc As ByteConverter
         
    Log("Response: ", bc.SubString2(Job.Response, 0Min(200, Job.Response.Length))) 'truncate to 200 characters
         If Job.JobName = "Example" Then
           
    'send another request
           'This time it is a POST request and we set the Content-Type header
           HttpJob.Initialize("Example2")
           
    'add headers before calling Post or Download (this is different than the standard HttpUtils2 library).
           HttpJob.AddHeader("Content-Type""application/x-www-form-urlencoded")
           
    HttpJob.Post("http://www.b4x.com/print.php?key1=value1""PostKey1=PostValue2&abc=def")
         
    End If
       
    Else
         
    Log("ErrorMessage: ", Job.ErrorMessage)
         
    Log("Status: ", Job.Status)
         
    Log(Job.Response)
       
    End If
    End Sub
    Usage

    1. Initialize HttpJob and set the job name.
    2. Optionally add headers with HttpJob.AddHeader.
    3. Call Download to send a GET request or Post to send a POST request.
    4. Handle the JobDone event.

    Notes

    1. rHttpUtils2 doesn't support concurrent requests. You need to wait for the JobDone event before you can send another request.
    2. The request data is stored in requestCache and the response data is stored in responseCache. You can change their sizes if they are not large enough.
    3. SSL certificates are not verified. They are accepted automatically.
    4. WiFiSSLSocket doesn't work with all https sites.

    HttpJob module depends on rESP8266WiFi and rRandomAccessFile libraries.
    It requires B4R v1.80+: https://www.b4x.com/android/forum/threads/b4r-v1-80-beta-is-available-for-download.74783/
     

    Attached Files:

    rwblinn and inakigarm like this.
  2. susu

    susu Well-Known Member Licensed User

    How to resize ResponseCache? I got message "ResponseCache is full (100)" when try to download/read a web page. Thanks.
     
  3. Erel

    Erel Administrator Staff Member Licensed User

    The two arrays sizes are set in Process_Globals of HttpJob.
     
    susu likes this.
  4. Mostez

    Mostez Active Member

    is it possible to modify this module for use with Ethernet shield? if yes, kindly indicate how
     
  5. Erel

    Erel Administrator Staff Member Licensed User

    Yes. Remove the ssl feature and change WiFiSocket to EthernetSocket.
     
Loading...