url编码okhttp3 android删除%20

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了url编码okhttp3 android删除%20相关的知识,希望对你有一定的参考价值。

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

  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(令牌,“UTF-8”)和其他,但没有一个工作。

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

谢谢

答案

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

在curl中你添加了两个标题。在OkHttp中,您添加了一个标头并将标记附加到网址,而不是将其添加到标头中。

你的代码应该是这样的:(假设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();
...

以上是关于url编码okhttp3 android删除%20的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Android M 及更高版本的 Volley 编写 OkHttp3 堆栈?

Android Retrofit2&OkHttp3添加统一的请求头Header

使用带有编码 URL 的 CURL 删除

Android实战——okhttp3的使用和封装

从 Android N (--min-api 24) 开始支持:okhttp3.Request okhttp3.Authenticator

Android使用OKhttp3实现登录注册功能+springboot搭建后端