72 lines
2.3 KiB
PowerShell
72 lines
2.3 KiB
PowerShell
function Invoke-ProgetRequest {
|
|
<#
|
|
.SYNOPSIS
|
|
USed for making fault tolerant web requests to proget
|
|
.EXAMPLE
|
|
$response = Invoke-ProgetRequest -URI $uri -Headers $headers
|
|
.PARAMETER URI
|
|
Proget URI to make request against
|
|
.PARAMETER Headers
|
|
Generally used for auth header, but accepts any header
|
|
.OUTPUTS
|
|
Response from invoke web request to Proget
|
|
.NOTES
|
|
Uses Invoke-CommandWithRetry to retry requests to recover from transient failures
|
|
#>
|
|
[cmdletbinding()]
|
|
[OutputType([Microsoft.PowerShell.Commands.WebResponseObject])]
|
|
param (
|
|
[Parameter(Mandatory = $true)]
|
|
$URI,
|
|
[Parameter(Mandatory = $true)]
|
|
$Headers
|
|
|
|
)
|
|
|
|
if ($null -eq $Headers) {
|
|
$Headers = @{}
|
|
}
|
|
|
|
$loglead = (Get-LogLeadName)
|
|
|
|
$retryStatusCodes = @(
|
|
[System.Net.HttpStatusCode]::BadGateway,
|
|
[System.Net.HttpStatusCode]::BadRequest,
|
|
[System.Net.HttpStatusCode]::GatewayTimeout,
|
|
[System.Net.HttpStatusCode]::InternalServerError,
|
|
[System.Net.HttpStatusCode]::ServiceUnavailable
|
|
)
|
|
|
|
Write-Host "$logLead : Performing web request to $($URI)"
|
|
|
|
$command = {
|
|
try {
|
|
$response = Invoke-WebRequest $URI -UseBasicParsing -Headers $headers
|
|
|
|
if ($response.StatusCode -ne "200") {
|
|
throw "Non-success Statuscode found was $($response.StatusCode)"
|
|
}
|
|
} catch [System.Net.WebException] {
|
|
if ($null -eq $_.Exception.Response -and $_.Exception.Message -eq "The operation has timed out.") {
|
|
Write-Host "$logLead : No response object found. Request timed out. throwing"
|
|
throw $_
|
|
}
|
|
} catch {
|
|
Write-Host "Exception $($_.Exception.Message)"
|
|
Write-Host "$logLead : Response code: $($response.StatusCode)"
|
|
if ($retryStatusCodes -contains $response.StatusCode) {
|
|
Write-Host "$logLead : retry code Detected, throwing"
|
|
throw $_
|
|
}
|
|
if ($response.StatusCode -ne "200") {
|
|
Write-Host "Non-success Statuscode found was $($response.StatusCode)"
|
|
throw $_
|
|
}
|
|
}
|
|
return $response
|
|
}
|
|
$response = Invoke-CommandWithRetry -ScriptBlock $command -Exponential
|
|
Write-Host "$logLead : Done Trying to $($URI)"
|
|
|
|
return $response
|
|
} |