@@ -52,6 +52,7 @@ Get-WebFile
52
52
param (
53
53
[parameter (Mandatory = $false , Position = 0 )][string ] $url = ' ' ,
54
54
[parameter (Mandatory = $false , Position = 1 )][string ] $userAgent = ' chocolatey command line' ,
55
+ [parameter (Mandatory = $false , Position = 2 )][hashtable ] $options = @ {Headers = @ {} },
55
56
[parameter (ValueFromRemainingArguments = $true )][Object []] $ignoredArguments
56
57
)
57
58
@@ -61,7 +62,7 @@ Get-WebFile
61
62
return @ {}
62
63
}
63
64
64
- $request = [System.Net.HttpWebRequest ]::Create($url );
65
+ [ System.Net.HttpWebRequest ] $request = [System.Net.HttpWebRequest ]::Create($url );
65
66
$defaultCreds = [System.Net.CredentialCache ]::DefaultCredentials
66
67
if ($defaultCreds -ne $null ) {
67
68
$request.Credentials = $defaultCreds
@@ -128,7 +129,33 @@ Get-WebFile
128
129
129
130
# http://stackoverflow.com/questions/518181/too-many-automatic-redirections-were-attempted-error-message-when-using-a-httpw
130
131
$request.CookieContainer = New-Object System.Net.CookieContainer
131
- if ($userAgent -ne $null ) {
132
+
133
+ if ($options.Headers -ne $null ) {
134
+ foreach ($key in $options.Headers.Keys ) {
135
+ # https://learn.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.headers?view=net-8.0#remarks
136
+ switch ($key.ToLower ()) {
137
+ ' accept' { $request.Accept = $options.Headers [$key ] }
138
+ ' connection' { }
139
+ ' content-length' { $request.ContentLength = $options.Headers [$key ] }
140
+ ' content-type' { $request.ContentType = $options.Headers [$key ] }
141
+ ' expect' { $request.Expect = $options.Headers [$key ] }
142
+ ' date' { $request.Date = $options.Headers [$key ] }
143
+ ' host' { $request.Host = $options.Headers [$key ] }
144
+ ' if-modified-since' { $request.IfModifiedSince = $options.Headers [$key ] }
145
+ ' range' { }
146
+ ' referer' { $request.Referer = $options.Headers [$key ] }
147
+ ' transfer-encoding' { }
148
+ ' user-agent' { $request.UserAgent = $options.Headers [$key ] }
149
+
150
+ Default {
151
+ # Only add headers that don't match a request property
152
+ $request.Headers.Add ($key , $options.Headers [$key ])
153
+ }
154
+ }
155
+ }
156
+ }
157
+
158
+ if ($userAgent -ne $null -and $options.Headers [' User-Agent' ] -eq $null ) {
132
159
Write-Debug " Setting the UserAgent to `' $userAgent `' "
133
160
$request.UserAgent = $userAgent
134
161
}
0 commit comments