我正在尝试向某个API发送json
发布请求,该API会作为响应发回二进制文件。
我在Postman
中做得很好:
部首:
身体和结果:
我从Code
的{{1}} Postman
部分获取了以下代码{/ 1}}
Java/OKHTTP
但是当我在android中使用上面的代码时,它失败了,我确信我获得了Internet许可,代码在OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"Text\":\"Hello\",\r\n \"APIKey\":\"MY_API_KEY\",\r\n \"Speaker\":\"Female1\",\r\n \"Format\":\"mp3/32/m\",\r\n \"Quality\":\"quality/normal\"\r\n}");
Request request = new Request.Builder()
.url("http://url/CloudService/ReadText")
.post(body)
.addHeader("content-type", "application/json")
.addHeader("cache-control", "no-cache")
.addHeader("postman-token", "0a1ce7c9-7a95-a2b9-7cde-8a7e6ce58386")
.build();
Response response = client.newCall(request).execute();
内执行。
我不会询问API或如何向某些API发送AsyncTask
json
请求并获取二进制文件作为响应。我用Post
但没有用。作为回应,我获得了307状态代码(而不是client.newCall(request).enqueue(new Callback(){//stuff here});
中的200)并且根本没有二进制数据。 API非常不清楚,并没有说明失败,我仍在努力。
我要问的是 Postman
是否正确生成Postman
的等效代码?如果不是,您在OkHttp
中提出的相当于此请求的建议是什么?
仅提供另一个示例,以下内容也是一个有效的Java/OkHttp
Python
脚本来执行相同的工作:
requests
答案 0 :(得分:0)
所以3天后我发现了问题,服务器API没有提到URL
端点必须以/
结束,即使在他们的示例代码中他们也没有使用一个。
似乎Postman
和Python requests
在/
的末尾使用了URL
,但是Postman
至少没有在生成的等效代码中提到。 OkHttp
也不以相同的方式运作。
然而,使用尾随/
解决了问题。