python-requests post 带有 unicode 文件名

2024-01-02

我已经在这里阅读了几个相关的问题,但没有找到可行的解决方案。

我有一个 Flask 服务器,其中包含以下简化代码:

app = Flask(__name__)
api = Api(app)


class SendMailAPI(Resource):
    def post(self):
        print request.files
        return Response(status=200)

api.add_resource(SendMailAPI, '/')

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

然后在客户端:

# coding:utf-8

import requests

eng_file_name = 'a.txt'
heb_file_name = u'א.txt'

requests.post('http://localhost:5000/', files={'file0': open(eng_file_name, 'rb')})
requests.post('http://localhost:5000/', files={'file0': open(heb_file_name, 'rb')})

当使用非 utf-8 文件名发送第一个请求时,服务器接收带有文件的请求并打印ImmutableMultiDict([('file0', <FileStorage: u'a.txt' (None)>)]),但是当发送带有 utf-8 文件名的文件时,服务器似乎没有收到打印的文件ImmutableMultiDict([]).

我正在使用请求2.3.0但最新版本也没有解决问题(2.8.1),Flask版本是0.10.1Flask-RESTful 版本是0.3.4.

我已经做了一些挖掘requests代码和请求似乎发送正常(即与文件一起),我在发送请求之前打印了请求,并看到文件名确实被编码为 RFC2231:

--6ea257530b254861b71626f10a801726
Content-Disposition: form-data; name="file0"; filename*=utf-8''%D7%90.txt

总而言之,我不完全确定问题是否出在内部requests没有正确地将文件附加到请求或者如果Flask拾取文件名根据 RFC2231 编码的文件时遇到问题。

UPDATE:遇到这个问题requestsGitHub:https://github.com/kennethreitz/requests/issues/2505 https://github.com/kennethreitz/requests/issues/2505


我认为这里的编码可能存在混乱 -

eng_file_name = 'a.txt'  # ASCII encoded, by default in Python 2
heb_file_name = u'א.txt'  # NOT UTF-8 Encoded - just a unicode object

要将第二个发送到服务器,您需要执行以下操作:

requests.post('http://localhost:5000/', files={'file0': open(heb_file_name.encode('utf-8'), 'rb')})

我有点惊讶的是,它并没有在尝试打开文件的客户端上引发错误 - 您在客户端上没有看到任何表明错误的信息?

编辑:确认或否认我的想法的一个简单方法当然是从客户端内部打印出内容以确保其被正确读取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python-requests post 带有 unicode 文件名 的相关文章

随机推荐

  • R中如何将数字转换为日期? [复制]

    这个问题在这里已经有答案了 我有以下数据框 id lt c 1 2 3 4 date lt c 19970807 19970902 19971010 19970715 df lt data frame id date 其中日期列中的值的类型
  • JavaScript 如何检查手机/平板电脑的用户代理

    我目前正在为客户网站开发一些 JS 工作 该网站在桌面和平板电脑平台上具有不同的功能 考虑 if navigator userAgent match Android i navigator userAgent match webOS i n
  • 使用 swift Xcode 6 默认选项卡栏项目颜色

    环境 Xcode 6 测试版 4 斯威夫特语言 iOS 选项卡式应用程序 默认 xCode 项目 如何将选项卡的默认灰色更改为其他颜色 最好是全球范围内 就我的研究而言 我需要以某种方式将每个选项卡的图像渲染模式更改为原始渲染模式 但我不知
  • Apache 重写 URL 但不重写某些文件夹

    我正在使用 Apache 将我的 URL 重写为干净的 URL RewriteRule index php 目前 这也会重写目录 这正是我想要的 因为我希望所有内容都通过我的 router index php 文件运行 然而 我想做的是拥有
  • SQL Server XML 存在()

    我在使用时遇到一些问题exist and value SQL Server 2008 中的方法 我的 XML 看起来像这样
  • 使用 stringformat 时 WPF 文本框绑定不起作用

    这是我的问题 我有一个文本框 它使用文本框预览并对输入的文本进行一些验证 文本框绑定到 double 属性 最初 当用户输入带有小数的数字时 它会崩溃 因为当数字为 1 时 每次击键后都会更新 它会自动更改为 1 删除小数 并且当在小数点后
  • 批量插入具有地理空间数据类型的表时出现“指定类型未注册”错误

    我正在尝试使用SqlBulkCopy类来自System Data程序集 4 6 1 批量插入具有地理空间数据类型的表 使用的代码大致如下 改编自https github com MikaelEliasson EntityFramework
  • 在邻近区域组建实力相似的团队

    Idea 令人遗憾的是 如此多的伟大国家 例如印度 和球员 例如莫萨拉赫 可能永远不会参加国际足联 足球 足球 世界杯 同样的论点也适用于由少数统治者主导的其他体育赛事 队 例如国际板球和篮球锦标赛 尝试创建一个更加平衡的赛事 同时仍然保留
  • new[] 是否调用 C++ 中的默认构造函数?

    当我使用 new 创建类数组时 int count 10 A arr new A count 我看到它调用了默认构造函数A count次 因此arr has count已初始化类型的对象A 但是如果我使用同样的东西来构造一个 int 数组
  • Java 通过 Socket 传输属性

    首先 这是一个家庭作业问题 话虽如此 我被困住了 谷歌搜索 java Properties over Sockets 会得到很多不相关的东西 我正在尝试通过套接字传输 Properties 对象 API 说它可以通过 Stream 或 Wr
  • 将json字符串转换为java对象?

    我一直在寻找与将 JSON 字符串转换为 Java 对象相关的示例 但没有找到任何好的示例 我发现的那个非常基本 并且没有真正处理复杂的 JSON 字符串 我正在制作一个应用程序 使用谷歌翻译 API 将字符串从英语翻译成不同的语言 Goo
  • 带过滤器 Android 的自定义列表视图适配器

    请尝试在我的列表视图上实现过滤器 但每当文本发生变化时 列表就会消失 请帮忙 这是我的代码 适配器类 package com talagbe schymn import java util ArrayList import android
  • 从 Oracle 的 RAW(16) 转换为 .NET 的 GUID

    我在手动调试 NET 应用程序时遇到困难 其中 Guid 值与 NET 和 Oracle 不同 Where C reads 17D89D326C2142D69B989F5201288DBF Oracle reads 329DD817216C
  • 将 Windows SID 存储在数据库中以供查找

    我有一个 ASP NET MVC 应用程序 我需要允许客户根据其环境配置 MembershipProviders 但仍然能够将该 MembershipUser 映射到我们数据库中的具体用户模型 Membership GetUser 将使我能
  • 将 Java 套接字配置为在断开连接时快速失败?

    我的服务器上有一个监听端口 我使用 Java 类连接到该端口Socket接口 即 Socket mySocket new Socket host port 然后我抓起一个OutputStream 用一个装饰PrintWriter在自动刷新模
  • 具有滚动背景的 Recyclerview

    我正在尝试创建一个具有滚动背景的 RecyclerView 如下所示 这个想法是 当我向上 向下滚动视图保持器时 背景 浅绿色 图像也应该同步向上 向下移动 关于如何实现这一目标有任何线索吗 这是我的基本 RecyclerView 配置
  • 使用特定 SA 通过 Cloud Build 部署 Dataflow 管道

    我竭尽全力尝试使用特定 SA 而不是默认的 Cloud Build SA 从 Cloud Build 部署数据流管道 但到目前为止尚未成功 我遵循了这个过程 https cloud google com build docs secure
  • 将值从一种方法返回到另一种方法

    Assume as precondition that the list of players is not empty Returns the winning score that is the lowest total score re
  • 将非 ASCII/UTF-8 字符转换为 LaTeX 代码

    我们必须将非 ASCII UTF 8 或命名实体字符转换为 LaTeX 代码 现在我们使用非 ASCII 到 Unicode 然后使用 Perl 脚本将 Unicode 转换为 LaTeX 实体 例如 oacute gt o x000F3
  • python-requests post 带有 unicode 文件名

    我已经在这里阅读了几个相关的问题 但没有找到可行的解决方案 我有一个 Flask 服务器 其中包含以下简化代码 app Flask name api Api app class SendMailAPI Resource def post s