YouTube V3 API - Google.Apis.Requests.RequestErrorBackend 错误 [503]

Posted

技术标签:

【中文标题】YouTube V3 API - Google.Apis.Requests.RequestErrorBackend 错误 [503]【英文标题】:YouTube V3 API - Google.Apis.Requests.RequestErrorBackend Error [503] 【发布时间】:2016-11-28 05:46:23 【问题描述】:

后端错误 [503] 后端错误 [503] 后端错误 [503] 后端错误 [503]

【问题讨论】:

FWIW,我也遇到了这种情况。一年运行良好的代码突然开始失败。我也在使用 C# v3 sdk。 感谢您的评论!很高兴知道我不会发疯!! :)) 我还没有测试,但是谷歌已经回复了我在这里提出的问题:code.google.com/p/gdata-issues/issues/… 【参考方案1】:

不久前,可能是几个月前,Google 上传服务器开始超时上传的次数比过去要多得多。这就是您所看到的错误。除了您可能只是报告错误而不是处理错误之外,您的代码没有任何问题。

您很可能正在使用 .Upload 方法。我这样说是因为错误 503 返回“任务已取消”。使用 .UploadAsync 方法时出错。我在上传程序中使用 .UploadAsync.ResumeAsync

当你在使用.Upload方法时遇到这样的错误,说明服务器太忙,无法在超时时间内处理你的请求。您的程序应能识别此错误并调用 .Resume 方法来恢复上传。

或者,您可以使用以下语句将超时从默认的 100 秒增加到更高的值: YouTube.HttpClient.Timeout = TimeSpan.FromMinutes(HTTP_CLIENT_TIMEOUT_MINUTES);

其中 YouTube 是您的 YouTubeService 对象的变量名称。

根据我的经验,增加超时不如处理错误并请求恢复上传有效。例如,如果您将超时设置为五分钟,那么如果五分钟后没有返回响应,您的程序仍然会失败。是的,这可能发生。我通常将超时设置为两分钟,然后如果发生错误则恢复上传。几乎总是,上传将正确恢复。

有时,上传可能会立即再次超时。因此,当触发 ProgressChanged IUploadProgress.Uploading 事件时,我会计算我的简历并重置简历计数器。我有 3 次恢复重试的限制,并且从未超过该限制。

【讨论】:

嗨,我确实使用 UploadAsync 和 ResumeAsync,我也已经使用了你提到的超时功能。几个月前我确实注意到超时的增加,我将超时设置为 5,从那以后一直很好。 500 个视频中只有 1 个视频超过了 5 次重试。但是,我认为视频达到 99% 或在抛出此 503 错误之前无法达到 1% 时不会超时。我从来没有在上传过程中收到 503。 此外,谷歌在研究了Error 503之后,建议开发者不要再调用这个函数了。 “503 backendError 服务器返回错误。请勿多次重试此查询。”我真的相信后端出了点问题,我不知道它是什么。这是否发生在其他人身上???【参考方案2】:

基于此thread,尝试使用某种形式的最终处理此错误 exponential back-off 或重试。

Example:该方法实现了指数退避策略来恢复失败的上传。

def resumable_upload(insert_request):
  response = None
  error = None
  retry = 0
  while response is None:
    try:
      print "Uploading file..."
      status, response = insert_request.next_chunk()
      if 'id' in response:
        print "Video id '%s' was successfully uploaded." % response['id']
      else:
        exit("The upload failed with an unexpected response: %s" % response)
    except HttpError, e:
      if e.resp.status in RETRIABLE_STATUS_CODES:
        error = "A retriable HTTP error %d occurred:\n%s" % (e.resp.status,
                                                             e.content)
      else:
        raise
    except RETRIABLE_EXCEPTIONS, e:
      error = "A retriable error occurred: %s" % e

    if error is not None:
      print error
      retry += 1
      if retry > MAX_RETRIES:
        exit("No longer attempting to retry.")

      max_sleep = 2 ** retry
      sleep_seconds = random.random() * max_sleep
      print "Sleeping %f seconds and then retrying..." % sleep_seconds
      time.sleep(sleep_seconds)

您还可以使用resumable upload protocol for Google APIs 更可靠地上传视频。此协议可让您在网络中断或其他传输故障后恢复上传操作,从而在网络故障时节省时间和带宽。

同时检查这些链接:

Youtube api v3 throws an exception during upload https://code.google.com/p/gdata-issues/issues/detail?id=4020

【讨论】:

我确实为此软件实施了指数退避策略。它已经安装了一年,没有任何问题。但是,这并不能解释当我在新的一天打开软件,上传第一个视频时出现的这个错误,然后砰!出现同样的错误,视频甚至没有达到 1%... 立即错误。然后我尝试使用与上述类似的方法重试,结果相同。这里 100% 肯定是后端问题。 我确实根据 Google 指南使用了 UploadAsync 和 ResumeAsync 方法以及我的“指数退避策略”。我已经完成了研究,同样,这个软件已经运行了一年多。 2-3 周前刚刚发生了一些事情,导致了这些 503。在阅读谷歌文档时,它指出错误“可能”是由于“指数退避策略”造成的。对我来说似乎是一个通用错误。

以上是关于YouTube V3 API - Google.Apis.Requests.RequestErrorBackend 错误 [503]的主要内容,如果未能解决你的问题,请参考以下文章

Youtube /v3/search API 不再返回直播视频

Youtube 数据 API V3 - 无视频网址

Youtube api V3 nextPageToken 重复

翻译 YouTube 视频标题和说明 | V3 API

php Youtube Data API v3

Youtube v3 API 字幕下载