
在使用linkedin视频api(尤其是在其beta阶段)进行视频上传时,开发者可能会遇到一些挑战。其中一个常见且令人困惑的问题是,在分段上传(multipart upload)的所有视频片段似乎都成功上传后,调用finalizeupload端点时却收到500 internal server error或504 gateway timeout错误。尽管开发者可能已仔细遵循文档、确保分段上传正确无误并收集了所有必要的etag,这些错误依然可能发生。
LinkedIn视频API支持大文件上传,通常需要将视频文件分割成多个小片段进行上传。其基本流程如下:
当开发者在finalizeUpload阶段遇到500 Internal Server Error或504 Gateway Timeout时,通常伴随着以下现象:
经过深入分析,导致这些500或504错误的核心原因在于finalizeUpload请求使用了错误的API端点。LinkedIn的文档有时可能引用了内部或测试环境的URL,例如https://api.linkedin-ei.com/v2/videos?action=finalizeUpload。然而,对于公共或生产环境的API调用,应使用标准的LinkedIn API端点。
错误的端点示例:https://api.linkedin-ei.com/v2/videos?action=finalizeUpload
正确的端点示例:https://api.linkedin.com/v2/videos?action=finalizeUpload
api.linkedin-ei.com可能是一个内部的“Early Integration”或测试环境的端点,不应在生产或面向公众的集成中使用。当请求发送到这个错误的端点时,即使请求结构和参数正确,服务器也无法正确处理,从而返回500 Internal Server Error或在处理超时后返回504 Gateway Timeout。
解决此问题的关键是确保在调用finalizeUpload端点时,使用正确的LinkedIn API主域名。
步骤概述:
以下是一个使用Guzzle HTTP客户端在PHP中进行finalizeUpload的示例,重点突出正确端点的使用。假设您已经完成了initializeUpload和所有分段上传,并获取了$videoUrn、$uploadToken和$etags数组。
<?php
require 'vendor/autoload.php'; // 引入 Composer 自动加载文件
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
// 假设您已经有一个配置好的 Guzzle 客户端实例
// 确保您的客户端配置了正确的认证头,例如 Authorization: Bearer <YourAccessToken>
$client = new Client([
'base_uri' => 'https://api.linkedin.com/', // 设置正确的基URI
'headers' => [
'Authorization' => 'Bearer YOUR_ACCESS_TOKEN', // 替换为您的实际访问令牌
'Content-Type' => 'application/json',
'X-Restli-Protocol-Version' => '2.0.0', // LinkedIn API 版本头
],
'timeout' => 600, // 增加超时时间以应对网络延迟,尽管不是根本原因
]);
// 假设这些变量已从之前的 initializeUpload 和分段上传步骤中获取
$userUrn = 'urn:li:person:YOUR_PERSON_URN'; // 替换为您的用户 URN
$videoUrn = 'urn:li:video:YOUR_VIDEO_URN'; // 从 initializeUpload 响应中获取
$uploadToken = 'YOUR_UPLOAD_TOKEN'; // 从 initializeUpload 响应中获取,可能为空
$etags = [
'etag_from_part_1',
'etag_from_part_2',
// ...所有分段上传返回的 etag
];
echo "准备终结视频上传...\n";
try {
// 构建 finalizeUpload 请求体
$finalizePayload = [
"finalizeUploadRequest" => [
"video" => $videoUrn,
"uploadToken" => $uploadToken,
"uploadedPartIds" => $etags
]
];
// 发送 finalizeUpload 请求到正确的端点
$response = $client->post(
'v2/videos?action=finalizeUpload', // 使用相对路径,因为 base_uri 已设置
[
'json' => $finalizePayload // Guzzle 会自动处理为 JSON
]
);
// 检查响应状态码
if ($response->getStatusCode() === 200) {
$responseData = json_decode($response->getBody()->getContents(), true);
echo "视频上传终结成功!\n";
echo "响应数据: " . json_encode($responseData, JSON_PRETTY_PRINT) . "\n";
// 在这里可以处理成功后的逻辑,例如获取视频状态或后续操作
} else {
echo "视频上传终结失败,状态码:" . $response->getStatusCode() . "\n";
echo "响应内容:" . $response->getBody()->getContents() . "\n";
}
} catch (RequestException $e) {
echo "请求异常:\n";
echo "错误信息: " . $e->getMessage() . "\n";
if ($e->hasResponse()) {
echo "响应状态码: " . $e->getResponse()->getStatusCode() . "\n";
echo "响应内容: " . $e->getResponse()->getBody()->getContents() . "\n";
}
} catch (\Exception $e) {
echo "发生未知错误:" . $e->getMessage() . "\n";
}
?>代码注意事项:
当您在LinkedIn视频Beta API的finalizeUpload阶段遇到500 Internal Server Error或504 Gateway Timeout时,首要排查方向应是您所使用的API端点URL。确保您使用的是https://api.linkedin.com/v2/videos?action=finalizeUpload而非任何其他内部或测试端点。虽然API处于Beta阶段可能会有其他潜在问题,但端点错误是一个常见且容易被忽视的根本原因。仔细审查API文档,并严格按照其指示使用正确的生产环境URL,是确保API集成成功的关键。
以上就是解决LinkedIn视频API上传终结阶段500/504错误:正确端点是关键的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号