OBX*_*OBX 5 java base64 android okhttp
我需要在我的请求的标题中添加一个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;
}
Run Code Online (Sandbox Code Playgroud)
而且,现在当我尝试从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();
Run Code Online (Sandbox Code Playgroud)
抛出异常,说:
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)
Run Code Online (Sandbox Code Playgroud)
解决这个问题的最佳方法是什么?
Basic OTE4MTExODExNjYwOjEyMzQ=
012345678901234567890123456789
你的绳子末端有东西!
0xa = LF (Line Feed)
您可以在堆栈跟踪中看到换行符!
所以你的值末尾有一个无效的换行符。我看不到任何将要添加的代码。不要addHeader(...)多次使用,而是直接将值添加到标题中。
好的,这就是如何正确使用它:
request request = new Request.Builder()
.url(url+sp.getString("MOB",""))
.get()
.addHeader(
new Headers.Builder().add("xkey", ""+Auth.getApiKey())
.add("authorization",""+Auth.getAuthentication(sp.getString("MOB",""),sp.getString("SPIN","")))
.add("cache-control", "no-cache")).build())
.build();
Run Code Online (Sandbox Code Playgroud)
好的,此代码未经测试,它只是解释了您应该如何执行此操作:使用新的标头构建器,添加键/值,然后通过调用创建标头build()
看看HeaderBuilder,看看HeaderBuilder!
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |