OkHttp 中的 setEntity 等价物 - Android

setEntity equivalent in OkHttp - Android

我正在从 Apache HTTP 旧版客户端迁移到 OkHttp,我在寻找两者之间的等价物时遇到了一些问题。几天前,我询问了同一主题的证书,现在我又被卡住了:

在旧的实现中我有这个:

TimeStampRequestGenerator reqGen = new TimeStampRequestGenerator();
reqGen.setCertReq(true);

MessageDigest digest = MessageDigest.getInstance("SHA256");
digest.update(myData);

TimeStampRequest request = reqGen.generate(TSPAlgorithms.SHA256, digest.digest(), BigInteger.valueOf(100));

byte[] enc_req = request.getEncoded();

myHttpPost.setEntity(new ByteArrayEntity(enc_req));

最相关的行是最后一行(因为其他行只是构建请求,幸运的是,我不需要更改它们),它将实体添加到 HttpPost。

检查 this answer 请求的实体似乎是

the majority of an HTTP request or response, consisting of some of the headers and the body, if present. It seems to be the entire request or response without the request or status line

但是这个定义让我感到困惑,因为我在 OkHttp 中找不到与 "headers and the body" 等价的东西。我尝试过的:

MediaType textPlain = MediaType.parse("text/plain; charset=utf-8");
RequestBody requestBody = RequestBody.create(textPlain, request.getEncoded().toString());
Request myNewRequest = (new Request.Builder()).url(urlString).post(requestBody).build();

但它没有用(我从服务器得到了 500)。有谁知道正确的等效项?

我终于找到了答案:我可以像以前一样使用编码的TimeStampRequest,无需任何修改。如我所想,更改仅针对 setEntity。

这是使用 OkHttp 的请求:

MediaType textPlain = MediaType.parse("binary");
RequestBody requestBody = RequestBody.create(textPlain, request.getEncoded());
Request myNewRequest = (new Request.Builder()).url(urlString).post(requestBody).build;

如您所见,我尝试的与之前代码相比的唯一变化是我使用 binary 作为 MediaType,这很有意义,因为我们正在发送一个字节数组(之前使用 ByteArrayEntity 来自 Apache 客户端)。

希望对大家有所帮助。