使用 OKHttp 创建正确的 MultipartBuilder Http 请求

2023-12-09

我喜欢重新编码我的项目并使用 okHttp 而不是 Android 中实现的默认 HttpClient。

我已经下载了 okhttp-main 版本的最新源代码。

现在我找到了一些如何创建和构建 POST 请求的示例。

现在是我的问题。我想创建一个 RequestBody 来保存多个数据(字符串、文件等),但我无法直接分配它们。

意味着 RequestBuilder 必须经过不同的循环才能添加数据。

OkHTTP RequestBody 似乎立即需要数据,如示例中所列https://github.com/square/okhttp/wiki/Recipes

当我想尝试类似的事情时

RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM);

for (Object aMData : dataClass.getData().entrySet()) {
            Map.Entry mapEntry = (Map.Entry) aMData;
            String keyValue = (String) mapEntry.getKey();
            String value = (String) mapEntry.getValue();
            requestBody.addPart(keyValue, value);
}


for (DataPackage dataPackage : dataClass.getDataPackages()) {
            requestBody.addPart("upfile[]", dataPackage.getFile());
}

requestBody.build();

它失败是因为 build() 本身创建了 RequestBody。之前它只是一个 MultipartBuilder()。如果我尝试将类型强制为 RequestBody,它将无法编译/运行。

那么,在创建 MultiPartBuilder 并添加数据和字符串后添加这些数据的正确方法是什么?


使用 OkHttp 分段上传文件

private static final String IMGUR_CLIENT_ID = "...";
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");

private final OkHttpClient client = new OkHttpClient();

public void run() throws Exception {
  // Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image
  RequestBody requestBody = new MultipartBuilder()
      .type(MultipartBuilder.FORM)
      .addPart(
          Headers.of("Content-Disposition", "form-data; name=\"title\""),
          RequestBody.create(null, "Square Logo"))
      .addPart(
          Headers.of("Content-Disposition", "form-data; name=\"image\""),
          RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
      .build();

  Request request = new Request.Builder()
      .header("Authorization", "Client-ID " + IMGUR_CLIENT_ID)
      .url("https://api.imgur.com/3/image")
      .post(requestBody)
      .build();

  Response response = client.newCall(request).execute();
  if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

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

使用 OKHttp 创建正确的 MultipartBuilder Http 请求 的相关文章

随机推荐

  • 防止多列布局中的元素碎片

    鉴于此代码 wrapper border 2px solid red padding 10px width 310px height 310px webkit column width 150px webkit column gap 10p
  • PHP 写入文件

    下面是我用来将地图数组 翻译 为 SQL 代码的一些代码 以便在更新游戏地图时可以轻松更新数据库 正如您所看到的 它将 SQL 代码打印到屏幕上 以便我可以复制并粘贴它 随着我的地图变得更大 这将变得效率低下 因为它会因大量输出而使浏览器崩
  • Antlr4:输入不匹配

    这是一个简单的语法测试 我认为很容易解析 但我立即得到 不匹配的输入 并且我无法弄清楚 Antlr 正在寻找什么 输入 include something program TEST1 BLAH BLAH 我的语法 grammar ProgH
  • 从字符串转换日期和/或时间时转换失败

    我有这个查询 set IDENTITY INSERT dbo OtherData1 ON INSERT INTO OtherData1 OtherDataID EmployeeID OtherDate OType OSubject Stat
  • Sphinx 内联包括

    我想使用 include 函数内联 但只有当我用两行新行与前面的文本分开时 我才能让它实际包含我想要的文件 在有人问之前 我想包含的文件是一个协议号 所以不 它根本不会从新行中受益 我希望能够轻松更改它 以便我可以在文档的多个位置使用它 我
  • Perl 中的 yyyymmddhhmmss 到 YYYY-MM-DD hh:mm:ss?

    在 perl 中将 yyyymmddhhmmss 转换为 YYYY MM DD hh mm ss 并返回的最佳方法是什么 例如 20130218165601 到 2013 02 18 16 56 01 并返回 能https metacpan
  • 颜色树状图根据外部标签向根向上分支,直到标签匹配

    来自问题使用现有列的树状图的颜色分支 我可以为树状图叶子附近的分支着色 代码 x lt 1 100 dim x lt c 10 10 set seed 1 groups lt c red red red red blue blue blue
  • 如何填补自增字段的“洞”?

    我读过一些关于此的文章 但没有一篇涉及这个问题 我想这是不可能的 但我还是会问 我有一个包含 50 000 多个寄存器的表 这是一个旧表 其中发生了各种插入 删除操作 也就是说 大约 300 个寄存器中存在各种 漏洞 即 1340 1341
  • 打包java应用程序

    我有一个 java 应用程序 从中构建了一个依赖于许多第三方 jar 的 jar 打包该应用程序以供最终用户分发的最佳 常见方法是什么 最好的方法是使用像这样的构建工具Maven2或类似的东西 并使用它来管理您的依赖项并构建一个一体化的包
  • R 中 2 个 DTM 的余弦相似度

    我有 2 个文档术语矩阵 DTM 1 有 1000 个向量 1000 个文档 并且 DTM2 有 20 个向量 20 个文档 所以基本上我想将 DTM1 的每个文档与 DTM2 进行比较 并希望使用余弦函数查看哪些 DTM1 文档与哪些 D
  • C# - 不时检查文件是否存在并从中读取

    我创建一个 Windows 服务 它会不时检查某个文件是否存在 如果存在 然后从中读取数据 将数据发送到服务器并将文件移动到另一个文件夹 文件大小约为 1 3 Mb 我想我会用System Threading Timer此处检查文件是否存在
  • 字符串中第一个数字用“*”分隔字符串

    我认为这是一个简单的问题 但我看不出我错过了什么 我想在第一个数字处分割字符串 在字符串中存在非字母数字符号之前效果很好 帮助 Works pet lt c Dog 100 Cat 340 df lt as data frame pet d
  • 在C++中使用线程交替打印奇数和偶数

    使用线程打印奇偶数我遇到了这个问题并想讨论 C 中的解决方案 我能想到使用2个二进制信号量奇数和偶数信号量 偶数信号量初始化为 1 奇数信号量初始化为 0 T1 thread function funOdd wait even print
  • MySQL默认时间格式UTC还是GMT?

    嗨 我对 UTC 和 GMT 很困惑 我在 MySQL 表中插入前列 event date 例如 2010 07 01 23 50 00 日期时间 我的客户在前端询问选项为 GMT 1 GMT 2 GMT 1 GMT 2 等等 如果我选择任
  • 如何在 Mediawiki 中检查用户是否是使用 Php 的 Sysop?

    我正在尝试向侧边栏添加一个 div 并且我只希望此块向管理员显示 php 如何检查用户是否是管理员 我正在尝试将其添加到 myskin php 文件中 但不知道该怎么做 我一直在使用类似的东西来检查用户是否登录 有没有类似的东西来检查该用户
  • React-Router v6 未在生产环境中渲染

    我在这个问题上已经失去了智慧 希望有任何想法可以让我走上正轨 我已经实现了一个 React js SPA 它使用react router domv6 来浏览应用程序功能 该应用程序在我的本地主机上完美运行 当部署到生产中时
  • 为什么 gcc 会生成没有标志 -fno-pie 的奇怪代码?

    我正在尝试使用标志 fno pie 和不使用标志 fno pie 在 gcc 中编译虚拟函数 void dummy test entrypoint 当我在没有标志的情况下编译时 gcc m32 ffreestanding c test c
  • 如何使用 PyObject_IsInstance 和非内置类作为第二个参数?

    在 C C 中 我想看看是否PyObject是一个实例 不幸的是 PyInstance Check宏不适用于新式类 所以 根据我读到的论坛帖子 PyObject IsInstance可以解决问题 然而 我发现的所有示例都演示了与内置类型 如
  • 2 个列表按元素相加?

    我现在有了 list1 1 2 3 list2 4 5 6 我希望拥有 1 2 3 4 5 6 5 7 9 只是两个列表的按元素相加 我当然可以迭代这两个列表 但我不想这样做 What is 最Pythonic的方式这样做 Use map
  • 使用 OKHttp 创建正确的 MultipartBuilder Http 请求

    我喜欢重新编码我的项目并使用 okHttp 而不是 Android 中实现的默认 HttpClient 我已经下载了 okhttp main 版本的最新源代码 现在我找到了一些如何创建和构建 POST 请求的示例 现在是我的问题 我想创建一