关于python模拟浏览器上传多文件多参数脚本(Multipart/from-data)

因为业务需要,需要模拟浏览器上传多个文件到网站平台,然后网上查了一大堆关于python的post上传操作。发现没有匹配操作。

这里就做个python关于requests的post请求,发送多文件、多参数的from-data操作。

from request_toolbelt.multipart.encoder import      MultipartEncoder
import requests
import os

def upload_files():
  num1 = 'a'
  num2 = 'b'
  files = 【file1,file2,file3】
  data =【("参数1",num1),("参数2",num2)】
  for file in files:
    name = os.path.basename(file)
    data2 = (name,open(file, 'rb'), '文件类型')
    file_list = 【('file_name', name), ('file_data',data2)】
    data.extend(file_list)
  mu = MultipartEncoder(data, boundary='.....')
  url = '....'
  resp = requests.post(url, data = mu, headers= ...)

#从headers中提取boundary信息
需要注意的是boundary参数,这个参数要跟header头中定义的一样,否则会出问题。否则会出问题,否则会出问题。重要事情说三遍。

headers = {
    'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    'cache-control': "no-cache",
}

转化后的data  form-data字符串为:

 
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=“参数1”

a
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=“参数2”

b
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=“file_name”

对应的name内容
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=“file_data”;filename=为上面data2中的name内容
content-Type: …

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=“为上面fir循环中的第二个name名”


------WebKitFormBoundary7MA4YWxkTrZu0gW–

主要的点是把参数部分调成 列表合适 然后里面嵌套 是元祖类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值