Skip to content

Commit 4e0dc28

Browse files
committed
Add SetHeader to WebRequest (Fixes #91)
1 parent c6b9097 commit 4e0dc28

9 files changed

+61
-15
lines changed

authenticators/DigestAuthenticator.cls

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ End Sub
8181
Private Sub IWebAuthenticator_BeforeExecute(ByVal Client As WebClient, ByRef Request As WebRequest)
8282
If Me.IsAuthenticated Then
8383
Me.RequestCount = Me.RequestCount + 1
84-
Request.AddHeader "Authorization", CreateHeader(Client, Request)
84+
Request.SetHeader "Authorization", CreateHeader(Client, Request)
8585
End If
8686
End Sub
8787

@@ -97,7 +97,7 @@ Private Sub IWebAuthenticator_AfterExecute(ByVal Client As WebClient, ByVal Requ
9797
WebHelpers.LogDebug "Extract Authenticate and retry 401 request " & Client.GetFullUrl(Request), "Digest.AfterExecute"
9898
ExtractAuthenticateInformation Response
9999

100-
Request.AddHeader "Authorization", CreateHeader(Client, Request)
100+
Request.SetHeader "Authorization", CreateHeader(Client, Request)
101101
Response.Update Client.Execute(Request)
102102
End If
103103
End Sub

authenticators/GoogleAuthenticator.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ Private Sub IWebAuthenticator_BeforeExecute(ByVal Client As WebClient, ByRef Req
242242
Me.Token = Me.GetToken(Client)
243243
End If
244244

245-
Request.AddHeader "Authorization", "Bearer " & Me.Token
245+
Request.SetHeader "Authorization", "Bearer " & Me.Token
246246
End If
247247
End Sub
248248

authenticators/HttpBasicAuthenticator.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ End Sub
5757
' @param in|out {WebRequest} Request The request about to be executed
5858
''
5959
Private Sub IWebAuthenticator_BeforeExecute(ByVal Client As WebClient, ByRef Request As WebRequest)
60-
Request.AddHeader "Authorization", "Basic " & WebHelpers.Base64Encode(Me.Username & ":" & Me.Password)
60+
Request.SetHeader "Authorization", "Basic " & WebHelpers.Base64Encode(Me.Username & ":" & Me.Password)
6161
End Sub
6262

6363
''

authenticators/OAuth1Authenticator.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ End Sub
7070
''
7171
Private Sub IWebAuthenticator_BeforeExecute(ByVal Client As WebClient, ByRef Request As WebRequest)
7272
' Add authorization header to request
73-
Request.AddHeader "Authorization", CreateHeader(Client, Request)
73+
Request.SetHeader "Authorization", CreateHeader(Client, Request)
7474
End Sub
7575

7676
''

authenticators/OAuth2Authenticator.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ Private Sub IWebAuthenticator_BeforeExecute(ByVal Client As WebClient, ByRef Req
6565
Me.Token = Me.GetToken(Client)
6666
End If
6767

68-
Request.AddHeader "Authorization", "Bearer " & Me.Token
68+
Request.SetHeader "Authorization", "Bearer " & Me.Token
6969
End Sub
7070

7171
''

authenticators/TwitterAuthenticator.cls

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Private Sub IWebAuthenticator_BeforeExecute(ByVal Client As WebClient, ByRef Req
6868
Me.Token = Me.GetToken(Client)
6969
End If
7070

71-
Request.AddHeader "Authorization", "Bearer " & Me.Token
71+
Request.SetHeader "Authorization", "Bearer " & Me.Token
7272
End Sub
7373

7474
''
@@ -129,7 +129,7 @@ Public Function GetToken(auth_Client As WebClient) As String
129129
auth_Request.RequestFormat = WebFormat.FormUrlEncoded
130130
auth_Request.ResponseFormat = WebFormat.Json
131131

132-
auth_Request.AddHeader "Authorization", _
132+
auth_Request.SetHeader "Authorization", _
133133
"Basic " & WebHelpers.Base64Encode(Me.ConsumerKey & ":" & Me.ConsumerSecret)
134134
auth_Request.AddBodyParameter "grant_type", "client_credentials"
135135

specs/Specs_WebRequest.bas

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,21 @@ Public Function Specs() As SpecSuite
337337
.Expect(Request.Headers(2)("Value")).ToEqual "header 2"
338338
End With
339339

340+
' SetHeader
341+
' --------------------------------------------- '
342+
With Specs.It("should SetHeader")
343+
Set Request = New WebRequest
344+
345+
Request.AddHeader "A", "add"
346+
347+
Request.SetHeader "A", "set"
348+
Request.SetHeader "B", "header"
349+
350+
.Expect(Request.Headers.Count).ToEqual 2
351+
.Expect(Request.Headers(1)("Value")).ToEqual "set"
352+
.Expect(Request.Headers(2)("Key")).ToEqual "B"
353+
End With
354+
340355
' AddQuerystringParam
341356
' --------------------------------------------- '
342357
With Specs.It("should AddQuerystringParam")

src/WebHelpers.bas

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1244,7 +1244,9 @@ Public Sub AddOrReplaceInKeyValues(KeyValues As Collection, Key As Variant, Valu
12441244
' Replace existing
12451245
KeyValues.Remove web_Index
12461246

1247-
If web_Index > KeyValues.Count Then
1247+
If KeyValues.Count = 0 Then
1248+
KeyValues.Add web_NewKeyValue
1249+
ElseIf web_Index > KeyValues.Count Then
12481250
KeyValues.Add web_NewKeyValue, After:=web_Index - 1
12491251
Else
12501252
KeyValues.Add web_NewKeyValue, Before:=web_Index

src/WebRequest.cls

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -507,14 +507,14 @@ End Property
507507
' ============================================= '
508508

509509
''
510-
' Add header to be sent with request
510+
' Add header to be sent with request.
511511
'
512512
' @example
513513
' ```VB.net
514514
' Dim Request As New WebRequest
515515
' Request.AddHeader "Authentication", "Bearer ..."
516516
'
517-
' ' -> (Header) Authentication: Bearer ...
517+
' ' -> (Header) Authorization: Bearer ...
518518
' ```
519519
'
520520
' @method AddHeader
@@ -525,6 +525,35 @@ Public Sub AddHeader(Key As String, Value As Variant)
525525
Me.Headers.Add WebHelpers.CreateKeyValue(Key, Value)
526526
End Sub
527527

528+
''
529+
' Add/replace header to be sent with request.
530+
' `SetHeader` should be used for headers that can only be included once with a request
531+
' (e.g. Authorization, Content-Type, etc.).
532+
'
533+
' @example
534+
' ```VB.net
535+
' Dim Request As New WebRequest
536+
' Request.AddHeader "Authorization", "A..."
537+
' Request.AddHeader "Authorization", "B..."
538+
'
539+
' ' -> Headers:
540+
' ' Authorization: A...
541+
' ' Authorization: B...
542+
'
543+
' Request.SetHeader "Authorization", "C..."
544+
'
545+
' ' -> Headers:
546+
' ' Authorization: C...
547+
' ```
548+
'
549+
' @method SetHeader
550+
' @param {String} Key
551+
' @param {Variant} Value
552+
''
553+
Public Sub SetHeader(Key As String, Value As Variant)
554+
WebHelpers.AddOrReplaceInKeyValues Me.Headers, Key, Value
555+
End Sub
556+
528557
''
529558
' Url Segments are used to easily add dynamic values to `Resource`.
530559
' Create a Url Segement in `Resource` with curly brackets and then
@@ -651,10 +680,10 @@ End Sub
651680
''
652681
Public Sub Prepare()
653682
' Add/replace general headers for request
654-
WebHelpers.AddOrReplaceInKeyValues Me.Headers, "User-Agent", WebUserAgent
655-
WebHelpers.AddOrReplaceInKeyValues Me.Headers, "Content-Type", Me.ContentType
656-
WebHelpers.AddOrReplaceInKeyValues Me.Headers, "Accept", Me.Accept
657-
WebHelpers.AddOrReplaceInKeyValues Me.Headers, "Content-Length", VBA.CStr(Me.ContentLength)
683+
SetHeader "User-Agent", WebUserAgent
684+
SetHeader "Content-Type", Me.ContentType
685+
SetHeader "Accept", Me.Accept
686+
SetHeader "Content-Length", VBA.CStr(Me.ContentLength)
658687
End Sub
659688

660689
''

0 commit comments

Comments
 (0)