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

标签 android okhttp

我正在处理一个 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/

相关文章:

android - 如何使 ImageButton 成为一个圆圈并使上传的图像适合该圆圈?

android - Kotlin中如何使用OKHTTP发送post请求?

java - okhttp 内容长度为 -1 大文件

java - 改造后。为每个post请求添加JSON参数

android - 离线传输路由算法

java - Android JavaMail API - 想要捕获 UnknownHostException

java - 如何使用 Intent 设置警报 选择警报的完整日期(包括日、月)

android - 如何在 Android 中将文件上传到 Cloudinary 时显示进度?

java - 发出 Volley-okhttp 请求时出现 NullPointerException

java - 'filename' 中的 UTF-8 字符对于 'Content-Disposition' 产生 "IllegalArgumentException: Unexpected char"