【问题标题】:url encoding okhttp3 android remove %20url 编码 okhttp3 android remove %20
【发布时间】:2018-08-10 05:33:30
【问题描述】:

您好,我在 Android 中使用 Okhttp3 库为 cURL 调用创建了一个 GET 调用,如下所示:

  curl -X GET "http://1.1.1.1:8080/api/v1/login" -H "accept: application/json" -H "Authorization: Bearer 123456"

这样在Android中使用OkHttp3库

final String url = BuildConfig.BASE_AUTH_URL + "/login" + "/" + token;

Request request = new Request.Builder()
              .url(url)
              .addHeader("Content-type", "application/json")
              .get()
              .build();
...

但是在我在 logcat 中打印的日志中,请求失败(500 内部服务器错误),因为 url 在 "Bearer" 后面有一个 "%20" 作为 "空格"

 Request{method=GET, url=http://1.1.1.1:8080/login/Bearer%20123456

错误是<html><head><title>Error</title></head><body>Internal Server Error</body></html>

org.json.JSONException: Value <html><head><title>Error< of type java.lang.String cannot be converted to JSONObject

我尝试使用 token.replace("%20", " ") 方法或 URLEncoder.encode(token, "UTF-8") 等方法,但没有一个有效。

有人可以帮我以正确的方式编码,但网址中没有“%20”字符吗?

谢谢

【问题讨论】:

    标签: android api replace okhttp


    【解决方案1】:

    您尝试使用 curl 的操作与您使用 OkHttp 库的操作之间存在差异。

    在 curl 中,您添加了两个标题。在 OkHttp 中,您添加了一个标头并将令牌附加到 url 而不是将其添加到标头中。

    您的代码应如下所示:(假设 token = "Bearer 123456"

    final String url = BuildConfig.BASE_AUTH_URL + "/login"; // removed token from here
    
    Request request = new Request.Builder()
                  .url(url)
                  .addHeader("Content-type", "application/json")
                  .addHeader("Authorization", token) // Auth header added here
                  .get()
                  .build();
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 2010-12-10
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2021-09-24
      • 2016-12-29
      相关资源
      最近更新 更多