【问题标题】:Converting cURL command to retrofit call将 cURL 命令转换为改造调用
【发布时间】:2016-04-01 12:50:25
【问题描述】:

我正在尝试将 cURL 命令转换为改造调用。 cURL 命令是:

curl -u {username}:{password} -X POST
--header "Content-Type: audio/wav" 
--header "Transfer-Encoding: chunked" 
--data-binary @{audiofile}.wav 
"{url}" -i -v

我已经通过添加用户名和密码的 Base64 作为授权标头来转换 -u 命令。我还添加了另一个标题。然而,问题在于改造电话。 改造电话目前是:

@POST
@Headers({"Transfer-Encoding: chunked", "Content-Type: audio/wav"})
Call<Station> translateAudio(@Url String url, @Header("Authorization") String auth,
        @Body RequestBody file);

使用 cURL 命令时,音频文件会在服务器上正确处理。但是,当我尝试改造电话时,我正在使用的服务出现错误。改造调用和 cURL 调用之间似乎存在差异。有谁知道有什么区别?凭据确实被接受,所以这不是问题。

【问题讨论】:

  • 你收到什么样的错误?
  • @jonas.koeritz: 错误是:{ "code_description": "Bad Request", "code": 400, "error": "unable to transcode data stream audio/wav -> audio/ x-float-array " } 但是,这是特定于该服务的。也许它可以帮助搜索发送文件的区别。
  • 如何创建file 对象?
  • @jonas.koeritz:我使用 new File(Environment.getExternalStorage()+"/file.wav") 创建了我的文件对象。文件有效,应用有权读取文件。
  • 问题的原因可能是改造将文件对象本身的二进制表示,而不是文件内容发送到服务器。

标签: android curl retrofit2


【解决方案1】:

您的代码尝试将 Android File 对象发送到服务器。您必须先将文件读入字节数组或其他合适的结构,才能将实际内容发送到服务器。

See this question for a quick solution how to do this

【讨论】:

  • 我尝试通过字节数组发送数据,但这并没有解决问题。我仍然得到同样的回应。我用来创建 RequestBody 的方法是 RequestBody.create(MediaType.parse("audio/wav"), bytes);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
相关资源
最近更新 更多