如何通过无依赖库的HTTPS请求从URL上传YouTube视频?
YouTube Data API 无库HTTPS上传视频方案
核心结论
可以完全不依赖第三方库,仅通过原生HTTPS请求实现视频上传。YouTube的视频文件不是通过元数据里的URL字段传递,而是作为multipart/form-data请求体的二进制部分发送——和你接触的Facebook上传逻辑有差异(Facebook支持file_url参数直接拉取远程文件,但YouTube不支持这种方式,必须主动把文件内容包含在请求中)。
直接上传(适用于100MB以内小文件)
这是最简便的方式,通过一次POST请求完成元数据提交和文件上传:
请求地址
POST https://www.googleapis.com/upload/youtube/v3/videos?uploadType=media&part=snippet,status
请求头
Authorization:Bearer YOUR_OAUTH2_ACCESS_TOKEN(必须包含youtube.upload权限)Content-Type:multipart/form-data; boundary=YOUR_BOUNDARY(自定义边界字符串,比如----VideoUploadBoundary123)
请求体结构
用自定义边界分隔两部分内容:元数据JSON和视频文件二进制流:
----VideoUploadBoundary123 Content-Type: application/json; charset=UTF-8 { "snippet": { "title": "Summer vacation in California", "description": "Had fun surfing in Santa Cruz", "tags": ["surfing", "Santa Cruz"], "categoryId": "22" }, "status": { "privacyStatus": "public" // 可选值:public/unlisted/private } } ----VideoUploadBoundary123 Content-Type: video/mp4 // 替换为你的视频实际MIME类型 [直接放入视频文件的二进制内容] ----VideoUploadBoundary123--
无库实现示例(用curl命令)
curl -X POST \ -H "Authorization: Bearer YOUR_OAUTH2_ACCESS_TOKEN" \ -H "Content-Type: multipart/form-data; boundary=----VideoUploadBoundary123" \ --data-binary $'----VideoUploadBoundary123\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n{"snippet":{"title":"Summer vacation in California","description":"Had fun surfing in Santa Cruz","tags":["surfing","Santa Cruz"],"categoryId":"22"},"status":{"privacyStatus":"public"}}\r\n\r\n----VideoUploadBoundary123\r\nContent-Type: video/mp4\r\n\r\n' \ --data-binary @/home/path/to/file.mp4 \ --data-binary $'\r\n\r\n----VideoUploadBoundary123--' \ "https://www.googleapis.com/upload/youtube/v3/videos?uploadType=media&part=snippet,status"
大文件分块上传(适用于100MB以上/256GB以内文件)
如果视频超过100MB,建议用可恢复分块上传,步骤如下:
- 发送初始化请求获取上传会话URL:
请求头包含POST https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,statusAuthorization和Content-Type: application/json,请求体为元数据JSON,返回的Location头就是会话URL。 - 用会话URL分块发送视频内容,每块大小建议5MB-10MB,请求头需包含
Content-Range指定当前块的字节范围。
关键注意事项
- 必须使用带
https://www.googleapis.com/auth/youtube.upload权限的OAuth 2.0令牌,API密钥仅支持只读操作,无法用于上传。 - 视频MIME类型必须是
video/*或application/octet-stream。 - 最大文件大小限制为256GB。
- YouTube不支持直接传入远程文件URL,必须将文件内容包含在请求体中。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

