使用aiohttp异步调用API+request上传文件中文文档名乱码解决方案

这篇具有很好参考价值的文章主要介绍了使用aiohttp异步调用API+request上传文件中文文档名乱码解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有时候在调用需要用异步调用API接口。在python中有很多框架,比如 asyncioCeleryQuart 等。这里我选择了 asyncio。Python 3.5以上版本内置了asyncio库,可以用来编写单线程的并发代码。可以使用此库与aiohttp结合来发送异步HTTP请求。

Python调用案例

GET

import asyncio
import aiohttp

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    # 指定要请求的URL
    url = "http://example.com"
    
    # 创建一个异步的HTTP会话
    async with aiohttp.ClientSession() as session:
        html = await fetch(session, url)  # 发送请求并获取响应
        print(html)  # 打印响应内容

# 运行异步主函数
asyncio.run(main())

POST

参数为JSON

import asyncio
import aiohttp

async def fetch(session, url, data):
    # 使用session.post发送POST请求,data是POST请求的数据
    async with session.post(url, data=data) as response:
        return await response.text()  # 返回响应的文本内容

async def main():
    url = "http://example.com"  # 指定URL
    data = {'key': 'value'}  # 准备发送的数据

    async with aiohttp.ClientSession() as session:
        html = await fetch(session, url, data)  # 发送POST请求并获取响应
        print(html)  # 打印响应内容

# 运行异步主函数
asyncio.run(main())

需要同时上传文件和JSON参数

import asyncio
import aiohttp
from aiohttp import FormData

async def fetch(session, url, data):
    async with session.post(url, data=data) as response:
        return await response.text()

async def main():
    url = "http://example.com/upload"  # 模拟的文件上传URL

    # 准备文件字典
    files = {
        'file1': open('example1.txt', 'rb'),
        'file2': open('example2.txt', 'rb')
    }

    # 准备普通表单数据
    form_data = {
        'username': 'user1',
        'password': 'pass123'
    }

    data = FormData()
    # 添加普通表单数据
    for key, value in form_data.items():
        data.add_field(key, value)
    
    # 添加文件
    for file_name, file_obj in files.items():
        data.add_field(file_name,
                       file_obj,
                       filename=file_name,
                       content_type='text/plain'	# 这里可以不填或者根据自己上传的文件格式修改
                      )

    async with aiohttp.ClientSession() as session:
        html = await fetch(session, url, data)  # 发送文件和其他数据
        print(html)

    # 确保所有文件在发送后都已关闭
    for file in files.values():
        file.close()

# 运行异步主函数
asyncio.run(main())

中文文档名报错

在上传文档路径名文件路径包含了中文字符时,使用aiohttp传递参数会将文件名变成乱码,这通常是因为路径中的非ASCII字符被编码成了URL编码或者类似的格式。

在request端无法进行修改,我们可以在被调用的api中需要用到filename处增加这一行来进行更改:文章来源地址https://www.toymoban.com/news/detail-760548.html

from urllib.parse import unquote

file.filename = unquote(file.filename)

到了这里,关于使用aiohttp异步调用API+request上传文件中文文档名乱码解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python中requests、aiohttp、httpx性能对比

    在Python中,有许多用于发送HTTP请求的库,其中最受欢迎的是requests、aiohttp和httpx。这三个库的性能和功能各不相同,因此在选择使用哪个库时,需要考虑到自己的需求和应用场景。 首先,让我们来了解一下这三个库的基本介绍。 requests 是一个简单易用的HTTP库,它可以发送

    2024年04月11日
    浏览(24)
  • python使用requests提交post请求并上传文件(multipart/form-data)

    目录 一、背景 二、请求接口上传文件         2.1、分析接口         2.2、python进行请求 三、总结         也是前几天,有一个需求上传文件需要自动化。具体是上传到系统一个文件,并收到返回结果。考虑使用python的requests,一般这种查询或上传文件的接口都是post请求。

    2024年02月12日
    浏览(36)
  • vue2,使用element中的Upload 上传文件,自定义上传http-request上传,上传附件支持多选,多个文件只发送一次请求,代码里有注释

    复制直接使用,组件根据multiple是否多选来返回附件内容,支持多选就返回数据附件,则返回一个附件对象。

    2024年02月10日
    浏览(41)
  • Python接口并发压力测试(单接口,多接口参数化)+异步aiohttp

    一 单接口 二 多接口参数化(实现多接口参数化并发,data和url必须一一对应,且THREAD_NUM并发线程数不能大于url_list长度) 三 多接口并发调用方法二 四 多接口同时并发(相当于集合点)(异步实现集合点)

    2024年02月06日
    浏览(31)
  • 微信小程序文件上传、下载和图片处理、文件操作API的使用

    这次按照我的理解来做这部分的笔记 首先,复习上节课所学的内容。就是网络请求api的使用  现在我有一个需求就是点击按钮实现获取后端返回的图片  先打开服务器  看一下我们要返回的图片路径  书写结构  看一下返回来的数据。是在data下的banners里。因此我们封装一下

    2024年02月04日
    浏览(35)
  • Flask 上传文件,requests通过接口上传文件

    这是一个使用 Flask 框架实现文件上传功能的示例代码。该代码定义了两个路由: /upload :处理文件上传请求。在该路由中,我们首先从请求中获取上传的文件,然后将文件保存到本地磁盘上,并返回一个字符串表示上传成功。 / :返回一个 HTML 表单,用于选择文件并提交上传

    2024年02月08日
    浏览(25)
  • 基于SpringBoot 实现一个文件上传的API接口。并使用postman测试

    1.  创建实体类用于返回结果、  2. 定义文件上传接口以及实现类    3. service 业务层 4. controller 控制层    5. postman 测试   文章参考 链接SpringBoot实现文件上传接口-阿里云开发者社区 (aliyun.com)

    2024年02月12日
    浏览(62)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器

    在先前的博客文章中,我们已经搭建了一个基于SRS的流媒体服务器。现在,我们希望通过Web接口来控制这个服务器的行为,特别是对于正在进行的 RTSP 转码任务的管理。这将使我们能够在不停止整个服务器的情况下,动态地启动或停止摄像头的转码过程。 Docker部署 SRS rtmp/f

    2024年02月02日
    浏览(58)
  • 调用百度文心AI作画API实现中文-图像跨模态生成

    乔冠华,女,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组。 研究方向:机器视觉与人工智能。 电子邮件:1078914066@qq.com 文心ERNIE-ViLG,一款适合中文的跨模态AI绘画大模型。 论文地址:https://arxiv.org/pdf/2112.15283.pdf 体验连接:https://wenxin.baidu.com/ern

    2024年02月03日
    浏览(39)
  • Day19-异步请求-axios文件上传

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包