[Gambas-user] HttpClient not exposing redirect response codes

T Lee Davidson t.lee.davidson at ...626...
Tue Apr 25 22:29:08 CEST 2017


On 04/25/2017 01:36 PM, Benoît Minisini wrote:
> Le 25/04/2017 à 19:12, T Lee Davidson a écrit :
>> I have run into a couple of sites that are responding with 301 (Moved
>> Permanently) and 302 (Moved Temporarily) codes. However, HttpClient.Code
>> yields "0" for both of those sites/codes (and HttpClient.Reason is
>> empty). 200 & 404 codes are reported successfully.
>>
>> Have I missed something in the properties that is preventing proper
>> disclosure of redirect response codes?
>>
>> Or is this a bug?
>>
>> (Project attached.)
>>
>
> HttpClient is "just" libcurl, so it may be a libcurl thing (that library
> has gazillons of options). I will check...
>

Thank you for taking the time to check into that, Benoît.

In the meantime, for anyone else needing to loop through redirects (currently scanning for a "Location" header), here's a short 
example subroutine:

Private Sub TestPage(sUrl As String)

   Dim hClient As New HttpClient
   Dim iMaxRedirects As Integer = 5 'Prevent infinite loop bot trap
   Dim iCurrentRedirects As Integer = 0
   Dim bFound As Boolean

   hClient.UserAgent = "AppleWebKit"
   hClient.Async = False
   hClient.URL = sUrl
   hClient.Timeout = 15
   Inc Application.Busy
   Do
     bFound = True 'Reset redirect flag
     hClient.Get
     If hClient.Headers.Find("Location:*", gb.Like) > -1 Then
       bFound = False 'Redirection
       If iCurrentRedirects = iMaxRedirects Then Break
       Inc iCurrentRedirects
       hClient.URL = Replace(hClient.Headers[hClient.Headers.Find("Location:*", gb.Like)], "Location: ", "")
       Print hClient.URL
       hClient.Headers.Clear 'Must manually clear headers array or "Location" header will persist causing redundant looping
     Endif
   Loop Until bFound = True
   Dec Application.Busy

   If hClient.Status < 0 Then
     Print "ERROR"
   End If

   Print "Success? -> " & hClient.Code

End


---
Lee





More information about the User mailing list