Python requests上传octet-stream视频至LinkedIn如何获取响应etag
问题根因
你之前尝试的两种提取逻辑都在解析响应体,但从curl返回的结果可以明确看到该接口响应头标注了Content-Length: 0,也就是响应体为空。你需要的etag是HTTP响应头字段,根本不存在于响应体中,因此解析JSON的操作完全是找错了位置。
正确提取方法
requests库会自动将所有响应头解析为大小写不敏感的字典结构,存放在响应对象的headers属性里,直接从中取值即可。
另外注意Python原生的open()函数不识别~代表的用户家目录缩写,需要手动展开路径避免文件找不到的问题,大文件上传时也不建议一次性把整个文件读入内存,直接传文件对象即可让requests自动分块传输。
完整修正代码:
import requests import os headers = { 'Content-Type': 'application/octet-stream', } params = { 'sau': 'aHR0cHM6Ly93d3cubGlua2VkaW4tZWkuY29tL2FtYnJ5L2FtYnJ5LXZpZGVvZWkvP3gtbGktYW1icnktZXA9QVFHVkdRS0FtS05oM2dBQUFYd19ObG1uZzVYcllXajEzZjIybXh4LW55SGVBclVKcE8y', } # 展开家目录路径 file_path = os.path.expanduser('~/Downloads/sample.mp4') with open(file_path, 'rb') as f: response = requests.put( 'https://www.linkedin.com/dms-uploads/C5505AQH-oV1qvnFtKA/uploadedVideo', params=params, headers=headers, data=f # 直接传文件对象,避免大文件占满内存 ) # 从响应头提取etag,键名大小写不敏感 etag_value = response.headers.get('etag') print(etag_value)
注意事项
- 部分服务返回的etag会被双引号包裹,或者带弱校验前缀
W/,如果后续步骤校验etag格式失败,按需做字符串裁剪即可。 - 只要是HTTP响应头里的字段,不管是
etag、x-request-id还是自定义头,都可以通过response.headers获取,不需要解析响应体。
内容的提问来源于stack exchange,提问作者NewStarDev
相关产品推荐
相关产品推荐

