Python requests.post 上传文件

requests 是一个非常流行的 Python HTTP 库,用于发送 HTTP 请求。它简化了与 HTTP 服务器的交互过程,使得发送请求、处理响应和管理会话变得更加简单直接。这个库的设计目标是让 HTTP 请求尽可能简单易用。本文主要介绍使用 requests.post() 方法 上传文件,以及相关的示例代码。

1、安装 requests

可以使用 pip 来安装 requests 库,

pip install requests

2、requests.post() 方法

requests.post() 方法用于发送 HTTP POST 请求。它接受一个 URL 作为参数,并返回一个 Response 对象。

参数:

参数

描述

url

要发送请求的 URL。

data

要发送的数据。可以是字符串、字典或 bytes 对象。

如果是字符串,将使用

application/x-www-form-urlencoded

编码。如果是字典,将使用

application/json

编码。如果是 bytes 对象,将使用

multipart/form-data 编码。

files

要上传的文件。可以是字典或 list 对象。

如果是字典,将使用 multipart/form-data 编码。

如果是 list 对象,每个元素将使用

multipart/form-data

编码。

headers

请求头。

params

查询参数。

cookies

cookie。

auth

认证信息。

timeout

超时时间。

verify

是否验证 SSL 证书。

stream

是否以流式方式读取响应内容。

**kwargs

其他可选参数。

3、使用 requests.post() 上传

使用 Python 的 requests.post() 方法上传文件,可以使用 files 参数,通过直接读取文件方式上传数据,也可以通过BytesIO对象上传数据,如下,

1)上传文件

import requests
import json
    
url = "https://request-url.com"
 
headers = {"Content-Type": "application/json; charset=utf-8"}
    
with open(filepath, 'rb') as fobj:
    response = requests.post(url, headers=headers, files={'file': fobj})
 
print("Status Code", response.status_code)
print("JSON Response ", response.json())

2)上传BytesIO对象

import requests

req = requests.get("https://example.com/images/1.jpg")

url = "https://example.com/upload"
buf = BytesIO(req.content)
#buf.write(content)
#buf.seek(0,0)
headers = {
    "referer": "http://www.cjavapy.com/admin/article/add",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36",
}
files = {'upload_file': ("WXACode%s.jpg" % articleId, buf.getvalue(), 'image/jpeg')}

# 发送请求
response = requests.post(url,files=files, headers=headers)

推荐阅读
cjavapy编程之路首页