gpt4 book ai didi

android - 如何使用 OkHttp 保留双引号

转载 作者:行者123 更新时间:2023-11-29 17:01:11 25 4
gpt4 key购买 nike

我正在处理一个 api,我需要在其中提供一个 JSON 数组作为 POST 请求中的查询参数。引用必须在 url 中,但 OkHttp 和 HttpURL 一直将其转换为 %22。 API 将无法识别并返回错误代码。如何让 OkHttp 保留请求中的报价。我正在处理的代码如下所示:

public static void post(String url, String[][] requestParams, Callback callback) {
HttpUrl httpUrl = addParamsToURL(getAbsoluteUrl(url), requestParams);


Request request = new Request.Builder()
.url(httpUrl)
.addHeader("app", Prefs.getString(Constants.HEADER_APP, null))
.addHeader("authoToken", Prefs.getString(Constants.HEADER_AUTH_TOKEN, null))
.post(RequestBody.create(MediaType.parse("application/json"), ""))
.build();
okHttpClient.newCall(request).enqueue(callback);
}

private static HttpUrl addParamsToURL(String url, String[][] requestParams) {
HttpUrl httpUrl = HttpUrl.parse(url);
HttpUrl.Builder urlBuilder = httpUrl.newBuilder();
for(int i = 0, size = requestParams.length; i < size; i++ ) {
urlBuilder.addEncodedQueryParameter(requestParams[i][0], requestParams[i][1]);
}
return urlBuilder.build();
}

我需要请求转到的 url 看起来像 https://www.baseurl.com/path?queryName=["email@domain.com"] 但它看起来像 https://www.baseurl.com/path/?queryName=[%22email@domain.com%22]

最佳答案

修复服务器。 OkHttp 与所有在查询字符串中将 " 编码为 %22 的网络浏览器一致。

Chrome :

GET /?a=[%22email@domain.com%22] HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

火狐:

GET /?a=[%22email@domain.com%22] HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0

Safari

GET /?a=[%22email@domain.com%22] HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8

关于android - 如何使用 OkHttp 保留双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42912039/

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