这是我收到错误时正在使用的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秒数将不起作用。我尝试等待x秒,然后再尝试使用新的页面令牌,但这不起作用。我认为所有的Web请求都应该是有效的请求,因为我使用的是相同的代码,只是前一个请求提供的是不同的页面令牌。
拔出我的头发几周!任何帮助,将不胜感激。谢谢!
答案 0 :(得分:0)
基于此documentation,当由于某些当前状态而不允许所请求的操作时,Classroom API返回FAILED_PRECONDITION (HTTP 400)
错误。
CourseMemberLimitReached
表示请求的操作将超出课程成员的最大允许数量。CourseNotModifiable
表示相关课程处于不允许修改其属性的状态。CourseTeacherLimitReached
表示请求的操作将超过课程老师允许的最大数量。UserGroupsMembershipLimitReached
表示所请求的用户已经是允许的最大组数的成员。AttachmentNotVisible
表示指定的一个或多个附件对用户不可见,不属于请求的类型或不存在。