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

1、需要的环境

  • Python3.X
  • Requests 库

2、单字段发送单个文件

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

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

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

  • 字典类型
  • 元组列表类型

2.1、字典类型的files参数

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

{
  "field1" : ("filename1", open("filePath1", "rb")),
  "field2" : ("filename2", open("filePath2", "rb"), "image/jpeg"),
  "field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"})
} 

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

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

缺省的话则会使用默认值。除了上面的使用形式,其实requests还是支持一个更简洁的参数形式,如下

{
  "field1" : open("filePath1", "rb"),
  "field2" : open("filePath2", "rb"),
  "field3" : open("filePath3", "rb")
}

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

{
  "field1" : ("filename1", open("filePath1", "rb")),
  "field2" : ("filename2", open("filePath2", "rb")),
  "field3" : ("filename3", open("filePath3", "rb"))
}

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

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

这里的filename的值为field1

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

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

[
  ("field1" : ("filename1", open("filePath1", "rb"))),
  ["field2" : ("filename2", open("filePath2", "rb"), "image/jpeg")],
  ("field3" : ("filename3", open("filePath3", "rb"), "image/jpeg", {"refer" : "localhost"}))
]

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

[
  ("field1" : open("filePath1", "rb"))),  ##filename 使用的是filepath的文件名
  ("field2" : open("filePath2", "rb").read())) ##filename 使用的是键值,即 field2
]

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

3.1、字典参数形式

{
  "field1" : [
                 ("filename1", open("filePath1", "rb")), 
                 ("filename2", open("filePath2", "rb"), "image/png"), 
                 open("filePath3", "rb"),
                 open("filePath4", "rb").read()
               ]
}

3.2、元组列表形式

[
  ("field1" , ("filename1", open("filePath1", "rb"))),
  ("field1" , ("filename2", open("filePath2", "rb"), "image/png")), 
  ("field1" , open("filePath3", "rb")),
  ("field1" , open("filePath4", "rb").read())
]

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

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

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

data = {"k1" : "v1"}
files = {
  "field1" : open("1.png", "rb")
}
r = requests.post("http://httpbin.org/post", data, files=files)

关于学习Python的更多文章,请扫描下方二维码。

 

 

  • 23
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
### 回答1: Python requests库可以通过以下步骤上传文件: 1. 导入requests库 ```python import requests ``` 2. 构造请求参数 ```python url = 'http://example.com/upload' files = {'file': open('file.txt', 'rb')} ``` 其中,`url`为上传文件的目标地址,`files`为上传文件,可以是单个文件多个文件,格式为字典,键为文件名,值为文件对象。 3. 发送请求 ```python response = requests.post(url, files=files) ``` 其中,`response`为服务器返回的响应对象。 完整代码示例: ```python import requests url = 'http://example.com/upload' files = {'file': open('file.txt', 'rb')} response = requests.post(url, files=files) print(response.text) ``` 注意事项: - 文件对象需要以二进制模式打开,即使用`'rb'`参数。 - 如果上传文件较大,可以使用分块上传,避免一次性上传整个文件。 ### 回答2: Python requests是一种基于HTTP库的Python第三方库,其可以在Python编程中方便地进行网络请求的处理,包括上传文件等操作。 Python requests中的文件上传利用了HTTP协议中的Multipart/form-data形式,对于文件上传操作,requests提供了多种方式:使用普通Form实现或者使用点对点输协议(p2p)。 使用requests上传文件的基本步骤包括以下几个部分: 1. 安装requests库 使用pip install requests命令可以安装最新版的requests库或者使用conda install requests命令。 2. 导入requests模块 在代码文件中导入requests库的方法如下: import requests 3. 使用requests.post方法上传文件 使用requests.post方法可以上传文件和表单数据,示例代码如下: url = 'http://httpbin.org/post' files = {'file': open('data.txt', 'rb')} r = requests.post(url, files=files) 其中,file参数指的是要上传文件,使用open函数打开文件,'rb'参数表示二进制方式读取数据。 4. 获取服务器响应 使用r对象可获取服务器响应,例如: print(r.text) 这将输出HTTP响应信息,包括HTTP状态码,HTTP头部信息和响应体。 总之,使用requests上传文件的方法是简单易懂的,只需几个简单的步骤就可以完成文件上传的任务。 ### 回答3: Python是一种高级编程语言,其requests模块是与URL通信最简单且最具效率的Python库之一。requests库可以实现HTTP协议客户端的操作,其中包括上传文件。下面将简单介绍一下使用requests上传文件的方法。 首先,我们需要导入requests库: ``` import requests ``` 实现文件上传需要使用post方法,对应的Python代码如下: ``` url = 'http://localhost:8000/upload_file/' # 上传文件的网址 file = {'file': open('example.txt', 'rb')} # 上传文件,这里以example.txt为例 response = requests.post(url, files=file) ``` 在代码中,我们需要指定上传文件的网址和文件名,以及使用Python内建的open方法打开文件并以二进制读取模式读取文件内容。文件通过files参数进行递,请求通过post方法发送。 如果你需要上传多个文件,可以通过一个列表来实现: ``` url = 'http://localhost:8000/upload_file/' # 上传文件的网址 files = [('file1', open('example1.txt', 'rb')), ('file2', open('example2.txt', 'rb'))] # 上传文件列表 response = requests.post(url, files=files) ``` 在这个例子中,我们通过使用一个元组列表来上传两个文件,元组中分别包含文件名和文件内容。 如果需要递更多的参数,可以添加更多的键值对,例如: ``` payload = {'key': 'value'} url = 'http://localhost:8000/upload_file/' # 上传文件的网址 files = {'file': open('example.txt', 'rb')} # 上传文件 response = requests.post(url, data=payload, files=files) ``` 在这个例子中,我们还添加了payload参数,这是一个包含其他请求参数的字典(请求头、URL参数、COOKIE等)。这些参数可以通过data参数递。 另一种上传文件的方式是使用multipart/form-data表单,这种方式对于递带格式的数据(比如json、xml等)和文件等内容非常有效。要使用该方式进行文件上传,我们可以修改payload和headers参数: ``` url = 'http://localhost:8000/upload_file/' # 上传文件的网址 files = {'file': open('example.txt', 'rb')} # 上传文件 payload = {'key1': 'value1', 'key2': 'value2'} # 请求参数 headers = {'Content-Type': 'multipart/form-data'} # 请求头参数,指示上传的类型 response = requests.post(url, data=payload, headers=headers, files=files) ``` 对于文件上传,我们需要注意以下几点: - 字典中键为文件域名的时候,值为打开的文件句柄; - open方法中第二个参数为读写模式,‘rb’表示二进制的只读模式,‘wb’表示二进制的只写模式; - 上传数据的时候如果有其他参数,可以使用字典类型的data,如{'key':'value'}; - 如果上传文件的方式是multipart/form-data,一定要设置headers参数,如{'Content-Type': 'multipart/form-data'};

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上帝De助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值