如何使用Python 中的 requests 库上传文件?

简介

Python有许多库支持,它们可以简化HTTP上的数据传输。requests库是最受欢迎的Python包之一,因为它在网络刮削中被大量使用。它在与服务器的交互中也很受欢迎 该库使上传JSON等流行格式的数据变得容易,但也使上传文件变得容易。

在本教程中,我们将看看如何使用Python的request库来上传文件。文章将首先介绍 requests 库和 post() 函数签名。接下来,我们将介绍如何使用 requests 包上传单个文件。最后但同样重要的是,我们在一个请求中上传多个文件。

用 Python 的 Requests 库上传单个文件

本教程包括如何发送文件,我们并不关心文件是如何创建的。为了继续学习,创建三个文件,分别称为 my_file.txtmy_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"
}

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值