gpt4 book ai didi

java - OkHttp 中的 setEntity 等效项 - Android

转载 作者:行者123 更新时间:2023-12-02 00:50:08 24 4
gpt4 key购买 nike

我正在从 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 中的“ header 和正文”等价的东西。我尝试过的:

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 ,这是有意义的,因为我们发送的是一个字节数组(之前从 Apache 客户端使用 ByteArrayEntity)。

希望它对某人有帮助。

关于java - OkHttp 中的 setEntity 等效项 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57866382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com