pip install requests_toolbelt

requests_toolbelt 是一个扩展 requests 库功能的第三方库,提供了许多有用的工具和功能,其中之一就是 MultipartEncoder。MultipartEncoder 用于处理复杂的多部分表单数据(multipart/form-data),特别是在上传大文件时非常有用。

MultipartEncoder 的使用:
1,MultipartEncoder 用于创建多部分表单数据。
2,fields 参数是一个字典,包含表单数据和文件。
3,file 是打开的文件对象,’video_mono.mov’ 是文件名,’application/octet-stream’ 是文件的 MIME 类型。
设置 Content-Type 头:
headers[‘Content-Type’] = encoder.content_type 设置请求头中的 Content-Type,以告知服务器请求体的格式。
发送请求:
使用 requests.post 发送 POST 请求,传入 headers 和 data。
通过使用 MultipartEncoder,可以更方便地处理复杂的多部分表单数据,特别是上传大文件时。

import pandas as pd
import requests
import os
from requests_toolbelt.multipart.encoder import MultipartEncoder
from datetime import datetime, timedelta

# URL
url = "https://jike.v.cntv.cn/interface/deal_post"

def login():
res = requests.post(url, data={
"action": "ulogin",
"username": "xxx",
"password": "xxx"}, verify=False)
return "JSESSIONID=" + res.json().get("sessionid")

def upload_video(cookie, mainname, keyword, content, filepath):
headers = {
"User-Agent": "Mozilla/5.0",
"cookie": cookie
}

# 定义请求的参数
data = {
"action": "uupload",
"username": "hehuihui",
"upload_strategy": "VR4K发CMS",
"catlog_columnname": "JOVE内部测试",
"catlog_mainname": mainname,
"catlog_uploadkeyword": keyword,
"catlog_content": content,
"catlog_precisioncutena": "精切",
"catlog_channelname": "央视网原创",
"catlog_firstcategory": "原创 ",
"catlog_secondcategory": "资讯",
"catlog_check": "不审核",
}

# 使用 MultipartEncoder
encoder = MultipartEncoder(
fields={
**data,
'upload_file': ('video_mono.mov', open(filepath, 'rb'), 'application/octet-stream')
}
)

# 设置 Content-Type 头
headers['Content-Type'] = encoder.content_type

try:
response = requests.post(url, headers=headers, data=encoder, verify=False, timeout=3600)
print(mainname, response.status_code, response.text)
except Exception as e:
print(f"Error uploading file: {e}")

if __name__ == '__main__':
c = login()
# 读取Excel文件
file_path = '/data/oss/VR视频迁移记录表.xlsx'
df = pd.read_excel(file_path)

# 遍历每一行
for index, row in df.iterrows():
mainname = row.values[0]
id = row.values[1]
keyword = row.values[2]
content = row.values[3]
print(mainname, id, keyword, content)
filepath = "/data/oss/" + id + "/video_mono.mov"
upload_video(c, mainname, keyword, content, filepath)