Skip to content

Commit a61dc3f

Browse files
zippy1981timhall
authored andcommitted
Added HEAD and GetRedirectLocation
Fixes #143 Closes #154
1 parent 861e790 commit a61dc3f

File tree

3 files changed

+108
-29
lines changed

3 files changed

+108
-29
lines changed

specs/Specs_WebClient.bas

Lines changed: 85 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Public Function Specs() As SpecSuite
2525

2626
Client.BaseUrl = HttpbinBaseUrl
2727
Client.TimeoutMs = 5000
28-
28+
2929
' --------------------------------------------- '
3030
' Properties
3131
' --------------------------------------------- '
@@ -46,42 +46,46 @@ Public Function Specs() As SpecSuite
4646

4747
With Specs.It("[Windows-only] Insecure should set options in WinHttpRequest")
4848
#If Mac Then
49-
' (Windows-only)
50-
.Expect(True).ToEqual True
49+
' (Windows-only)
50+
.Expect(True).ToEqual True
5151
#Else
52-
Dim Http As Object
53-
Set Request = New WebRequest
54-
55-
' WinHttpRequestOption_EnableCertificateRevocationCheck = 18
56-
' WinHttpRequestOption_SslErrorIgnoreFlags = 4
57-
58-
Set Http = Client.PrepareHttpRequest(Request)
59-
.Expect(Http.Option(18)).ToEqual True
60-
.Expect(Http.Option(4)).ToEqual 0
61-
62-
Client.Insecure = True
63-
64-
Set Http = Client.PrepareHttpRequest(Request)
65-
.Expect(Http.Option(18)).ToEqual False
66-
.Expect(Http.Option(4)).ToEqual 13056
52+
Dim Http As Object
53+
Set Request = New WebRequest
54+
55+
' WinHttpRequestOption_EnableCertificateRevocationCheck = 18
56+
' WinHttpRequestOption_SslErrorIgnoreFlags = 4
57+
58+
Set Http = Client.PrepareHttpRequest(Request)
59+
.Expect(Http.Option(18)).ToEqual True
60+
.Expect(Http.Option(4)).ToEqual 0
61+
62+
Client.Insecure = True
63+
64+
Set Http = Client.PrepareHttpRequest(Request)
65+
.Expect(Http.Option(18)).ToEqual False
66+
.Expect(Http.Option(4)).ToEqual 13056
6767
#End If
68+
69+
Client.Insecure = False
6870
End With
6971

7072
With Specs.It("[Mac-only] Insecure should set --insecure flag in cURL")
7173
#If Mac Then
72-
Set Request = New WebRequest
73-
74-
Curl = Client.PrepareCurlRequest(Request)
75-
.Expect(Curl).ToNotMatch "--insecure"
76-
77-
Client.Insecure = True
78-
79-
Curl = Client.PrepareCurlRequest(Request)
80-
.Expect(Curl).ToMatch "--insecure"
74+
Set Request = New WebRequest
75+
76+
Curl = Client.PrepareCurlRequest(Request)
77+
.Expect(Curl).ToNotMatch "--insecure"
78+
79+
Client.Insecure = True
80+
81+
Curl = Client.PrepareCurlRequest(Request)
82+
.Expect(Curl).ToMatch "--insecure"
8183
#Else
82-
' (Mac-only)
83-
.Expect(True).ToEqual True
84+
' (Mac-only)
85+
.Expect(True).ToEqual True
8486
#End If
87+
88+
Client.Insecure = False
8589
End With
8690

8791
' ============================================= '
@@ -113,6 +117,46 @@ Public Function Specs() As SpecSuite
113117
.Expect(Response.Data("headers")("Cookie")).ToMatch "abc=123"
114118
.Expect(Response.Data("form")("message")).ToEqual "Howdy!"
115119
End With
120+
121+
With Specs.It("Execute should work with each method")
122+
Set Request = New WebRequest
123+
124+
Request.Method = WebMethod.HttpGet
125+
Request.Resource = "get"
126+
127+
Set Response = Client.Execute(Request)
128+
.Expect(Response.StatusCode).ToEqual WebStatusCode.Ok
129+
130+
Request.Method = WebMethod.HttpPost
131+
Request.Resource = "post"
132+
133+
Set Response = Client.Execute(Request)
134+
.Expect(Response.StatusCode).ToEqual WebStatusCode.Ok
135+
136+
Request.Method = WebMethod.HttpPatch
137+
Request.Resource = "patch"
138+
139+
Set Response = Client.Execute(Request)
140+
.Expect(Response.StatusCode).ToEqual WebStatusCode.Ok
141+
142+
Request.Method = WebMethod.HttpPut
143+
Request.Resource = "put"
144+
145+
Set Response = Client.Execute(Request)
146+
.Expect(Response.StatusCode).ToEqual WebStatusCode.Ok
147+
148+
Request.Method = WebMethod.HttpDelete
149+
Request.Resource = "delete"
150+
151+
Set Response = Client.Execute(Request)
152+
.Expect(Response.StatusCode).ToEqual WebStatusCode.Ok
153+
154+
Request.Method = WebMethod.HttpHead
155+
Request.Resource = "get"
156+
157+
Set Response = Client.Execute(Request)
158+
.Expect(Response.StatusCode).ToEqual WebStatusCode.Ok
159+
End With
116160

117161
' GetJson
118162
' --------------------------------------------- '
@@ -198,6 +242,18 @@ Public Function Specs() As SpecSuite
198242

199243
' SetProxy
200244

245+
' GetRedirectLocation
246+
' --------------------------------------------- '
247+
With Specs.It("should GetRedirectLocation of Request")
248+
Set Request = New WebRequest
249+
Request.Resource = "redirect/1"
250+
251+
Dim RedirectLocation As String
252+
RedirectLocation = Client.GetRedirectLocation(Request)
253+
254+
.Expect(RedirectLocation).ToEqual "/get"
255+
End With
256+
201257
' GetFullUrl
202258
' --------------------------------------------- '
203259
With Specs.It("should GetFullUrl of Request")

src/WebClient.cls

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,26 @@ Public Sub SetProxy(ProxyServer As String, _
449449
Me.ProxyBypassList = BypassList
450450
End Sub
451451

452+
''
453+
' If the given Request is a redirect (301, 302, or 307),
454+
' then get value of the "Location" header
455+
'
456+
' @param {WebRequest} Request
457+
' @return {String}
458+
''
459+
Public Function GetRedirectLocation(Request As WebRequest) As String
460+
Dim RedirectRequest As WebRequest
461+
Set RedirectRequest = Request.Clone
462+
RedirectRequest.Method = WebMethod.HttpHead
463+
464+
Dim Response As WebResponse
465+
Set Response = Me.Execute(RedirectRequest)
466+
467+
If Response.StatusCode = 301 Or Response.StatusCode = 302 Or Response.StatusCode = 307 Then
468+
GetRedirectLocation = WebHelpers.FindInKeyValues(Response.Headers, "Location")
469+
End If
470+
End Function
471+
452472
''
453473
' Get full url by joining given `WebRequest.FormattedResource` and `BaseUrl`.
454474
'

src/WebHelpers.bas

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ Public Enum WebMethod
304304
HttpPut = 2
305305
HttpDelete = 3
306306
HttpPatch = 4
307+
HttpHead = 5
307308
End Enum
308309

309310
''
@@ -1404,6 +1405,8 @@ Public Function MethodToName(Method As WebMethod) As String
14041405
MethodToName = "POST"
14051406
Case WebMethod.HttpGet
14061407
MethodToName = "GET"
1408+
Case WebMethod.HttpHead
1409+
MethodToName = "HEAD"
14071410
End Select
14081411
End Function
14091412

0 commit comments

Comments
 (0)