简介
Python有许多库支持,它们可以简化HTTP上的数据传输。requests
库是最受欢迎的Python包之一,因为它在网络刮削中被大量使用。它在与服务器的交互中也很受欢迎 该库使上传JSON等流行格式的数据变得容易,但也使上传文件变得容易。
在本教程中,我们将看看如何使用Python的request
库来上传文件。文章将首先介绍 requests
库和 post()
函数签名。接下来,我们将介绍如何使用 requests 包上传单个文件。最后但同样重要的是,我们在一个请求中上传多个文件。
用 Python 的 Requests 库上传单个文件
本教程包括如何发送文件,我们并不关心文件是如何创建的。为了继续学习,创建三个文件,分别称为 my_file.txt
、my_file_2.txt
和 my_file_3.txt
。
安装 requests 库
pip install requests
创建一个名为single_uploader.py
的新文件,它将存储我们的代码。在该文件中,让我们开始导入请求库。
import requests
现在我们已经准备好上传文件了! 当上传一个文件时,我们需要打开文件并流式传输内容。毕竟,我们不能上传一个我们无法访问的文件。我们将用open()
函数来做这件事。
open()
函数接受两个参数:文件的路径和模式。文件的路径可以是一个绝对路径,也可以是运行脚本的相对路径。如果你要上传同一目录下的文件,你可以直接使用文件的名称。
第二个参数,mode
,将采取 "读取二进制 "的值,用rb
表示。这个参数告诉计算机,我们想以读取模式打开文件,并希望以二进制格式消费该文件的数据。
test_file = open("my_file.txt", "rb")
注意:以二进制模式读取文件很重要。requests
库通常确定Content-Length
头,这是一个以字节为单位的值。如果不以字节模式读取文件,库可能会得到一个不正确的Content-Length
值,这将在文件提交过程中导致错误。
在本教程中,我们将向免费的httpbin服务发出请求。这个API允许开发者测试他们的HTTP请求。让我们创建一个变量来存储我们要发布文件的URL。
test_url = "http://httpbin.org/post"
我们现在有了一切可以进行请求的东西。我们将使用requests
库的post()
方法来上传文件。我们需要两个参数来完成这个工作:服务器的URL和files
属性。我们还将在一个变量中保存响应,写下以下代码。
test_response = requests.post(test_url, files = {"form_field_name": test_file})
files属性需要一个字典。键是接受文件的表格字段的名称。值是你想上传的打开的文件的字节数。
通常情况下,为了检查post()方法是否成功,我们要检查响应的HTTP状态代码。我们可以使用响应对象的ok属性,test_url。如果它是真的,我们将打印出HTTP服务器的响应,在这种情况下,它将回显请求。
if test_response.ok:
print("Upload completed successfully!")
print(test_response.text)
else:
print("Something went wrong!")
让我们试试吧 在终端,用python命令执行你的脚本。
python single_uploader.py
你的输出将与此类似:
Upload completed successfully!
{
"args": {},
"data": "",
"files": {
"form_field_name": "This is my file\nI like my file\n"
},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "189",
"Content-Type": "multipart/form-data; boundary=53bb41eb09d784cedc62d521121269f8",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.25.0",
"X-Amzn-Trace-Id": "Root=1-5fc3c190-5dea2c7633a02bcf5e654c2b"
},
"json": null,
"origin": "102.5.105.200",
"url": "http://httpbin.org/post"
}