前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python requests post 使用 multipart/form-data 上传文件方法

python requests post 使用 multipart/form-data 上传文件方法

作者头像
卓越笔记
发布2023-03-11 09:27:35
2.4K0
发布2023-03-11 09:27:35
举报
文章被收录于专栏:卓越笔记卓越笔记

发生背景

使用 requests 的 post files 请求,发现服务端没法接受到文件,总提示请上传图片

接口分析

F12 分析请求结构,主要看接口类型、请求头、Payload。

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryO3dY4lwWKYZkUXxq

解决办法

使用 requests-toolbelt

代码语言:javascript
复制
import requests

from requests_toolbelt import MultipartEncoder



def upload_img(self, img_path, where):
    """
    图片上传
    :param img_path:
    :param where:
    :return:
    """
    # https://requests.readthedocs.io/projects/cn/zh_CN/latest/user/quickstart.html#id4
    api = urljoin(self.domain, "/backend/upload/image")
    # image_open = open(img_path, 'rb')
    img_name = os.path.basename(img_path)
    img_open = open(img_path, 'rb')
    img_mime = magic.from_file(img_path, mime=True)
    # print(img_name, img_open, img_mime)
    # 请求参数
    data = MultipartEncoder(
        fields={"type": where,
                'image': (img_name, img_open, img_mime)}
    )
    # 构造请求头
    self.headers["Content-Type"] = data.content_type
    self.headers["Referer"] = "http://test.com/img/change"

    res = requests.post(api, headers=self.headers, data=data)
    if res.status_code == 200:
        image_url = res.json().get("image")
        print(image_url)
        return image_url
    else:
        print(res.text)
        return None
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-3-10 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 发生背景
  • 接口分析
  • 解决办法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档