后端错误[503]后端错误[503]后端错误[503]后端错误[503]
答案 0 :(得分:1)
前一段时间,也许是几个月,谷歌上传服务器的上传时间比过去多得多。那是你看到的错误。您的代码没有任何问题,除了您可能只是报告错误而不是处理错误。
您很可能正在使用 .Upload 方法。我这样说是因为错误503返回"任务被取消了。"使用 .UploadAsync 方法时出错。我在上传程序中使用 .UploadAsync 和 .ResumeAsync 。
如果在使用 .Upload 方法时出现类似错误,则表示服务器太忙,无法在超时期限内处理您的请求。您的程序应该识别此错误并调用 .Resume 方法来恢复上传。
或者,您可以使用以下语句将超时从默认的100秒增加到更高的值:
YouTube.HttpClient.Timeout = TimeSpan.FromMinutes(HTTP_CLIENT_TIMEOUT_MINUTES);
其中YouTube是 YouTube服务对象的变量名称。
根据我的经验,增加超时不如处理错误并请求恢复上载一样有效。例如,如果将超时设置为五分钟,那么如果五分钟后未返回响应,则程序仍将失败。是的,那可能发生。我通常将超时设置为两分钟,然后在发生错误时继续上传。几乎总是,上传将正确恢复。
有时,上传可能会立即再次超时。出于这个原因,我会计算我的简历并在触发ProgressChanged IUploadProgress.Uploading事件时重置恢复计数器。我有三个简历重试的限制,并且从未超过这个限制。
答案 1 :(得分:1)
根据此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更可靠地上传视频。此协议允许您在网络中断或其他传输失败后恢复上载操作,从而在网络出现故障时节省时间和带宽。
另请查看以下链接: