android https 证书校验问题

ksabrina 2013-12-03 09:12:18
在做C/S https请求时,服务端加入了证书校验。我在发送请求时已经做了信任所有证书的动作,但是获取返回数据,进行数据流操作时,报javax.net.ssl.SSLException: Connection closed by peer异常,求大神指点!!!
代码如下:

public static Response connect(Request request)
{
Response response = new Response();
response.setCorrespondingRequest(request);
HttpURLConnection httpConn = null;

System.setProperty("http.keepAlive", "false");

try
{
SSLContext sc = SSLContext.getInstance("SSL");

sc.init(null, new TrustManager[] { new MyTrustManager() }, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());

URL url = new URL(request.getUrl());

if (!url.getProtocol().toLowerCase().equals("https"))
{
httpConn = (HttpURLConnection) url.openConnection();
}
else
{
httpConn = getHttpsConn(url);
}

httpConn.setDoInput(true);
httpConn.setDoOutput(true);
httpConn.setUseCaches(false);

// set request method.
setRequestMethod(request, httpConn);

// set request property.
setRequestProperty(request, httpConn);

httpConn.setConnectTimeout(CONNECT_TIMEOUT);
httpConn.setReadTimeout(READ_TIMEOUT);

if (request.getBody() != null)
{
// set request content.
Logger.i(TAG, "request body : \n" + request.getBody());
byte[] data = request.getBody().getBytes("UTF-8");

// write data.
OutputStream os = httpConn.getOutputStream();
if (request.isGZip())
{
GZIPOutputStream gzos = new GZIPOutputStream(os);
gzos.write(data);
gzos.flush();
gzos.close();
}
else
{
os.write(data);
os.flush();
}
os.close();
}

// get response code.
int responseCode = initResponseCode(response, httpConn);
// connect OK(200) or Created(201)

}
catch 省略

}

红色OutputStream os = httpConn.getOutputStream();报异常。
...全文
781 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈小阿 2016-01-11
  • 打赏
  • 举报
回复
Birds2018 2013-12-04
  • 打赏
  • 举报
回复
OutputStream os = httpConn.getOutputStream(); 这个代码前 已经做了httpConn.connect(); ? 咋没看到。
ksabrina 2013-12-03
  • 打赏
  • 举报
回复
引用 1 楼 birdsaction 的回复:
这个一般是服务器提前关闭 或者某个IO流未关闭造成的。
可是下面有 os.close();呀
ksabrina 2013-12-03
  • 打赏
  • 举报
回复
引用 2 楼 birdsaction 的回复:
httpConn.connect();加上试试,
这段代码有,我是放在线程池里做的。只是在上面的代码里没体现出来。
Birds2018 2013-12-03
  • 打赏
  • 举报
回复
httpConn.connect();加上试试,
Birds2018 2013-12-03
  • 打赏
  • 举报
回复
这个一般是服务器提前关闭 或者某个IO流未关闭造成的。

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧