Base 64编码包含电子邮件地址的用户名 - java

时间:2012-05-14 15:26:25

标签: java http encoding base64

我一直在使用httpClient尝试将连接字符串写入基于https的API,而用户名/密码auth则有点棘手。

使用Appache commons base64编码器我被迫将一个字节数组传递给构造函数,我的auth应该是email @ companyName:password但是base 64转换器不支持@符号(因为它不是0-9 az或az或/ +),但在我可以授权之前,这显然需要解决....帮助?

代码(在请求之前):

import org.apache.commons.codec.binary.Base64;
....
        String encoding = Base64.encodeBase64String("username@company.com:password");
        HttpPost httppost = new HttpPost("https://webapi.com/api/protectedarea");
        httppost.setHeader("Authorization", "Basic " + encoding);

完整错误代码:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:150)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:575)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)

2 个答案:

答案 0 :(得分:2)

问题是你是对字符串进行双重编码。首先是第一行,然后是第三行。

除非你在另一端进行双重解码,否则你会遇到问题(为什么要这样做?)。

答案 1 :(得分:1)

您的服务器似乎没有有效的SSL证书。

我过去为开发环境所做的工作是实现新的X509TrustManager - 这基本上是检查证书凭据是否有效。