[转]python的requests发送/上传多个文件

1、需要的环境

Python2.X

Requests 库

2、单字段发送单个文件

在requests中发送文件的接口只有一种,那就是使用requests.post的files参数, 请求形式如下:

  1. url = "http://httpbin.org/post"

  2.  

    data = None

  3.  

    files = { ... }

  4.  

    r = requests.post(url, data, files=files)

而这个files参数是可以接受很多种形式的数据,最基本的2种形式为:

字典类型

元组列表类型

2.1、字典类型的files参数

官方推荐使用的字典参数格式如下:

  1. {

  2.  

    "field1" : ("filename1", open("filePath1", "rb")),

  3.  

    "field2" : ("filename2", open("filePath2", "rb"), "image/jpeg"),

  4.  

    "field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"})

  5.  

    }

这个字典的key就是发送post请求时的字段名, 而字典的value则描述了准备发送的文件的信息;从上面可以看出value可以是2元组,3元组或4元组;

这个元组的每一个字段代表的意思一次为:

("filename", "fileobject", "content-type", "headers")

缺省的话则会使用默认值

除了上面的使用形式,其实requests还是支持一个更简洁的参数形式,如下

  1. {

  2.  

    "field1" : open("filePath1", "rb"),

  3.  

    "field2" : open("filePath2", "rb"),

  4.  

    "field3" : open("filePath3", "rb")

  5.  

    }

这种形式的参数其等同效果如下, 其中filename是filepath的文件名:

  1. {

  2.  

    "field1" : ("filename1", open("filePath1", "rb")),

  3.  

    "field2" : ("filename2", open("filePath2", "rb")),

  4.  

    "field3" : ("filename3", open("filePath3", "rb"))

  5.  

    }

当然,你还可以这样发送一个文件请求

  1. {

  2.  

    "field1" : open("filePath1", "rb").read()

  3.  

    }

这里的filename的值为field1

2.2、元组列表类型的files参数

其实元组列表的形式与字典的形式基本一样,除了最外层的包装不一样;而在requests内部最终会把字典参数形式 转换 为 元组列的形式。官网推荐的用法如下:

  1. [

  2.  

    ("field1" ,("filename1", open("filePath1", "rb"))),

  3.  

    ["field2",("filename2", open("filePath2", "rb"), "image/jpeg")],

  4.  

    ("field3" ,("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"}))

  5.  

    ]

列表里面的子项可以是元组,也可以是列表;同样这里也支持简介的形式,如下:

  1. [

  2.  

    ("field1" ,open("filePath1", "rb"))), ##filename 使用的是filepath的文件名

  3.  

    ("field2" ,open("filePath2", "rb").read())) ##filename 使用的是键值,即 field2

  4.  

    ]

3、单字段发送多个文件【即上传文件时,设置为多选了】

3.1、字典参数形式

  1. {

  2.  

    "field1" : [

  3.  

    ("filename1", open("filePath1", "rb")),

  4.  

    ("filename2", open("filePath2", "rb"), "image/png"),

  5.  

    open("filePath3", "rb"),

  6.  

    open("filePath4", "rb").read()

  7.  

    ]

  8.  

    }

3.2、元组列表形式

  1. [

  2.  

    ("field1" , ("filename1", open("filePath1", "rb"))),

  3.  

    ("field1" , ("filename2", open("filePath2", "rb"), "image/png")),

  4.  

    ("field1" , open("filePath3", "rb")),

  5.  

    ("field1" , open("filePath4", "rb").read())

  6.  

    ]

上面2种形式发送的请求,所有的文件都会在同一个字段下,后台服务只要从field1字段就可以获取全部的文件对象

4、同时发送普通数据字段

上面介绍的是使用发送文件内容请求,而有时候我们在发送文件的同时还需要发送普通的数据字段,此时普通数据字段直接存在data参数中即可,如下:

https://blog.csdn.net/five3/article/details/74913742/

https://blog.csdn.net/u013511989/article/details/80422734

  1. data = {"k1" : "v1"}

  2.  

    files = {

  3.  

    "field1" : open("1.png", "rb")

  4.  

    }

  5.  

    r = requests.post("http://httpbin.org/post", data, files=files)

--------------------- 本文来自 像风一样的自由 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/five3/article/details/74913742?utm_source=copy

原文地址:https://www.cnblogs.com/shengs/p/9752083.html

时间: 2024-10-07 22:14:08

[转]python的requests发送/上传多个文件的相关文章

python ssh登录linux 上传和下载文件

#!usr/bin/python# coding: utf-8 import paramikoimport jsonremotedir='/tmp/log'remotefile = 'bst_manager-2019-04-17-info.log'hostname = '192.168.50.34'port = 8022username = 'root'password ='*****'command = """tail -n 30 /tmp/log/bst_manager-

七牛云存储Python SDK使用教程 - 上传策略详解

文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k 浏览 本教程旨在介绍如何使用七牛的Python SDK来快速地进行文件上传,下载,处理,管理等工作. 前言 我们在上面的两节中了解到,客户端上传文件时,需要从业务服务器申请一个上传凭证(Upload Token),而这个上传凭证是业务服务器根据上传策略(PutPolicy)来生成的,而这个生成过程中

python之实现ftp上传下载代码(含错误处理)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kaituorensheng/p/4480512.html#_label2 import ftplib import socket import os def ftpconnect(ftp_info): try: ftp = ftplib.FTP(ftp_info[0]) except (socket.er

python模块paramiko的上传下载和远程执行命令

#!/usr/bin/python # -*- coding: utf-8 -*- import paramiko,os,datetime server_ip = '192.168.1.123' server_user = 'root' server_passwd = '10241010' server_port = 22 #local_dir='C:\Python27' #remote_dir='/soft2/nba/' def ssh_connect(): ssh = paramiko.SS

Python模拟HTTP Post上传文件

使用urllib2模块构造http post数据结构,提交有文件的表单(multipart/form-data),本示例提交的post表单带有两个参数及一张图片,代码如下: #buld post body data boundary = '----------%s' % hex(int(time.time() * 1000)) data = [] data.append('--%s' % boundary) data.append('Content-Disposition: form-data;

Python远程登录Linux操作系统,执行命令、创建目录、上传及下载文件

主要是创建文件: #! /bin/bash # -*- coding: utf-8 -*- import paramiko import os ssh = paramiko.SSHClient() key = paramiko.AutoAddPolicy() ssh.set_missing_host_key_policy(key) pkey = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') paramiko.util.log

flask 文件上传(单文件上传、多文件上传)

文件上传 在HTML中,渲染一个文件上传字段只需要将<input>标签的type属性设为file,即<input type=”file”>. 这会在浏览器中渲染成一个文件上传字段,单击文件选择按钮会打开文件选择窗口,选择对应的文件后,被选择的文件名会显示在文件选择按钮旁边. 在服务器端,可以和普通数据一样获取上传文件数据并保存.不过需要考虑安全问题,文件上传的漏洞也是比较流行的攻击方式.除了常规的CSRF防范,我们还需要重点关注这几个问题:验证文件类型.验证文件大小.过滤文件名 定

Linux (rz、sz命令行)与本地电脑 命令行上传、下载文件

Linux 与本地电脑直接交互, 命令行上传.下载文件. 一.lrzsz命令行安装: 1.rpm安装:(链接: http://pan.baidu.com/s/1cBuTm2 密码: vijf) rpm -ivh lrzsz-0.12.20-22.1.x86_64.rpm 2.yum 安装: yum install lrzsz 二.命令使用: 1.发送到本地: sz 文件名 2.上传到服务器: rz -be 在弹出的框中选择文件,上传文件的用户和组是当前登录的用户

SpringMVC实现单文件上传、多文件上传、文件列表显示、文件下载

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 一.新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+standard.jar 整个相关的包如下: 整个工程目录如下: 二.配置web.xml和SpringMVC文件