【发布时间】:2016-10-05 19:34:24
【问题描述】:
我需要在请求的标头中添加一个 Base64 字符串。现在我的 base64 字符串是 mobileNum+pin 。这就是我生成编码字符串的方式:
public static String getAuthentication(String userName,String spin)
{
String userCredentials = userName+":"+spin;
String base64=null;
try
{
byte[] data = userCredentials.getBytes("UTF-8");
base64 = Base64.encodeToString(data, Base64.DEFAULT);
}
catch (UnsupportedEncodingException e){}
String basicAuth = "Basic "+ new String(base64);
return basicAuth;
}
而且,现在当我尝试从 Ok-HTTP 发出请求时,
Request request = new Request.Builder()
.url(url+sp.getString("MOB",""))
.get()
.addHeader("xkey", ""+Auth.getApiKey())
.addHeader("authorization",""+Auth.getAuthentication(sp.getString("MOB",""),sp.getString("SPIN","")))
.addHeader("cache-control", "no-cache")
.build();
它抛出异常,说:
java.lang.IllegalArgumentException: Unexpected char 0x0a at 30 in authorization value: Basic OTE4MTExODExNjYwOjEyMzQ=
at okhttp3.Headers$Builder.checkNameAndValue(Headers.java:320)
at okhttp3.Headers$Builder.add(Headers.java:270)
at okhttp3.Request$Builder.addHeader(Request.java:175)
at com.shreybank.shrey.activities.RegisterActivity.getCredentials(RegisterActivity.java:244)
at com.shreybank.shrey.activities.RegisterActivity.access$900(RegisterActivity.java:38)
at com.shreybank.shrey.activities.RegisterActivity$4.onResponse(RegisterActivity.java:229)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:133)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
解决此问题的最佳方法是什么?
【问题讨论】:
-
你能编辑我的答案吗?我不使用 ok3http-lib,因此我总是陷入拼写错误——正如你所提到的!最好的方法是您编辑我的答案,以便其他用户可以向您学习!
标签: java android base64 okhttp