如何通过Python requests向LinkedIn上传文件?curl成功但Python上传失败
问题原因
你代码的错误出在误用了requests的files参数:
curl命令里的--upload-file是直接将文件的二进制内容作为PUT请求的原始请求体上传,而files参数是用来构造multipart/form-data格式的表单请求的,使用该参数时requests会自动覆盖你设置的Content-Type请求头,同时在请求体中加入表单边界、字段标识等额外内容,和LinkedIn接口要求的请求格式完全不匹配,因此上传失败。
正确实现代码
import requests headers = { 'Content-Type': 'application/octet-stream' } file_path = 'docs/short_video.mp4' upload_url = 'https://api.linkedin.com/mediaUpload/C5400AQHpR1ANqMWqNA/uploadedVideo/0?ca=vector_feedshare&cn=uploads_secure&ccn=ambry-video&m=AQLEZ2pjh43pagYYYXRaCyztOykwDzluHkkYTbsMjNUzivrEOeObw9h3&app=1234&sync=1&v=beta&ut=1KeEm4JnMnJpo1' # 用with上下文管理器自动处理文件关闭,避免资源泄漏 with open(file_path, 'rb') as f: # 直接将文件对象传给data参数即可实现和curl一致的二进制流上传 resp = requests.put(upload_url, data=f, headers=headers) # 可打印响应信息排查问题 print(f"响应状态码:{resp.status_code}") print(f"响应内容:{resp.text}")
补充说明
- 示例中的上传URL是LinkedIn生成的临时授权URL,每次上传视频前都需要重新调用接口获取,不要直接硬编码使用示例中的URL
- 上述实现会自动采用流式上传,不会将整个视频文件一次性加载到内存,适合大体积视频上传场景
内容的提问来源于stack exchange,提问作者Naqi Shah
相关产品推荐
相关产品推荐

