B4R Library [module] rHttpUtils2 - Http Client

Erel

Administrator
Staff member
Licensed User
The HttpJob module implements an http client. It is a simplified version of B4X HttpUtils2.

Example:
B4X:
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, 0, Min(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.

Updates

V1.00 - Response timeout timer that closes the connection after the set time (2000ms by default). The timer starts after the first byte is received.
 

Attachments

Last edited:

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.
 

Erel

Administrator
Staff member
Licensed User
The two arrays sizes are set in Process_Globals of HttpJob.
 

Erel

Administrator
Staff member
Licensed User
Yes. Remove the ssl feature and change WiFiSocket to EthernetSocket.
 

Erel

Administrator
Staff member
Licensed User
V1.00 - Response timeout timer that closes the connection after the set time (2000ms by default). The timer starts after the first byte is received.
 

Helmut S

Member
Licensed User
Hello everybody,

I'm tying to use this module with an Ethernet shield, but I constantly get the "failed to connect" error. I have removed the ssl feature and I use EthernetSocket instead of WiFiSocket.

B4X:
host:>www.orf.at<, path:>/<, payload:><
trying to connect to: www.orf.at port: 443
*******************************
JobName: Test
ErrorMessage: Failed to connect
Status: 0
Any suggestions what could be wrong?
 

Helmut S

Member
Licensed User
Sorry, my mistake. I forgot to initialize the ethernet connection. :rolleyes:

Thanks for your reply.
 
Top