Вот фрагмент кода powershell, который я использую при получении ошибки:
Код вызова:
$global:NextPage = $null
GetCourses # Calls a function to get the first 500 rows
Do {
GetNextCourses $global:NextPage # Get next 500 rows using Page Token
} Until ($global:NextPage -eq $null)
The function where I always get an error. Always at a different rowset / Page Token:
function GetNextCourses ($next) {
$retrycount = 0
$completed = $false
[int]$retries = 5
[int]$secondsDelay = 10
while (-not $completed) {
Try{
$list_courses_url = "https://classroom.googleapis.com/v1/courses?pageToken=" + $next
$auth = "Bearer " + $tokens.access_token
$headers = @{ "Authorization" = $auth }
$global:response = Invoke-WebRequest -Uri $list_courses_url -Method GET -headers $headers -ErrorAction Stop -UseBasicParsing
if ($global:response.StatusCode -eq 200) {
$completed = $true
}
}
Catch {
Write-Host $global:Failure.StatusDescription
if ($retrycount -ge $retries) {
$global:Failure = $_.Exception.Response
Write-Host $global:Failure.StatusDescription
throw
} else {
$secondsDelay = $secondsDelay * 2
Start-Sleep $secondsDelay
$retrycount++
$global:Failure = $_.Exception.Response
if ($global:Failure.StatusCode.Value__ -eq 400) {
Write-Host $global:Failure.StatusDescription
GetTokens
}
if ($global:Failure.StatusCode.Value__ -eq 401) {
GetTokens
}
if ($global:Failure.StatusCode.Value__ -eq 403) {
GetTokens
}
if ($global:Failure.StatusCode.Value__ -eq 404) {
Write-Host $global:Failure.StatusDescription
return
}
if ($global:Failure.StatusCode.Value__ -eq 429) {
Write-Host $global:Failure.StatusDescription
Write-Host "....... Waiting ........"
Start-Sleep -Seconds 600 # Additional wait for Resource Exhausted
}
if ($global:Failure.StatusCode.Value__ -eq 500) {
Write-Host $global:Failure.StatusDescription
Write-Host "....... Waiting ........"
}
if ($global:Failure.StatusCode.Value__ -eq 503) {
Write-Host $global:Failure.StatusDescription
Write-Host "....... Waiting ........"
}
}
}
}
$rows = $global:response | ConvertFrom-Json
$global:NextPage = $rows.nextPageToken
....... # Больше кода ....... # Еще код
Я много раз выполнял этот код, получая 400 ошибок неверных запросов всегда на разных токенах страниц, поэтому я знаю, что код работает правильно для X строк.У нас есть тысячи курсов в школах округа Гринвилл, и код всегда работает в течение нескольких часов, прежде чем вы получите 400 неверных запросов.После того, как я получу код ошибки 400, получение нового токена или ожидание x количество секунд не работает.Я пытался подождать х секунд, прежде чем пытаться использовать новый маркер страницы, и это не работает.Я бы подумал, что все веб-запросы должны быть действительными, поскольку я использую один и тот же код только для другого токена страницы, предоставленного предыдущим запросом.Любая помощь будет оценена.Спасибо!