URL 编码 okhttp3 android 删除 %20



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

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

以这种方式在安卓中使用 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 在"持有者"一词之后有一个"%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"聊天者吗?

谢谢

你尝试使用 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();
...

最新更新