Неверный запрос HTTP 400 с использованием https://classroom.googleapis.com/v1/courses?pageToken=SomePageToken - PullRequest
0 голосов
/ 19 сентября 2018

Вот фрагмент кода 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 количество секунд не работает.Я пытался подождать х секунд, прежде чем пытаться использовать новый маркер страницы, и это не работает.Я бы подумал, что все веб-запросы должны быть действительными, поскольку я использую один и тот же код только для другого токена страницы, предоставленного предыдущим запросом.Любая помощь будет оценена.Спасибо!

1 Ответ

0 голосов
/ 21 сентября 2018

Исходя из этой документации , Classroom API возвращает ошибку FAILED_PRECONDITION (HTTP 400), когда запрошенное действие не разрешено из-за некоторого текущего состояния.

  • CourseMemberLimitReached указывает, что запрошенное действие превысит максимально допустимое количество участников курса.
  • CourseNotModifiable указывает, что соответствующий курс находится в состоянии, которое не позволяет изменять его свойства.
  • CourseTeacherLimitReached указывает, что запрошенное действие превысит максимально допустимое числопреподаватели курса.
  • UserGroupsMembershipLimitReached указывает, что запрашиваемый пользователь уже является членом максимально допустимого количества групп.
  • AttachmentNotVisible указывает, что одно или несколько указанных вложений не видны пользователю, не имеют запрошенного типа или не существуют.
...