我希望通过这个问题解决我的长期问题,并希望你们能帮助,但首先;我连接到HTTPS自签名证书服务器已有将近3周的问题。尽管这里有多种解决方案,但我似乎无法解决我的问题。可能我不知道如何正确使用它或没有一些文件或导入正确的库。
我遇到了一些网站,要求我从我尝试连接的https网站下载证书,当我这样做时。在使用我创建的证书或密钥库之前,我必须执行一些步骤。我从这个网站得到了这个解决方案:
Android: Trusting SSL certificates
// Instantiate the custom HttpClient
DefaultHttpClient client = new MyHttpClient(getApplicationContext());
HttpGet get = new HttpGet("https://www.mydomain.ch/rest/contacts/23");
// Execute the GET call and obtain the response
HttpResponse getResponse = client.execute(get);
HttpEntity responseEntity = getResponse.getEntity();
如上所述,我在最后一行之后遇到了问题。我该如何处理responseEntity?如果我希望在WebView上显示https网站,我该如何使用它?一些帮助和解释会很好:)
答案 0 :(得分:4)
如果您希望HttpEntity
正确方式的内容不包括调用HttpEntity#getContent()
来检索流并做大量毫无意义Android SDK中已有的东西。
试试这个。
// Execute the GET call and obtain the response
HttpResponse getResponse = client.execute(get);
HttpEntity responseEntity = getResponse.getEntity();
// Retrieve a String from the response entity
String content = EntityUtils.toString(responseEntity);
// Now content will contain whatever the server responded with and you
// can pass it to your WebView using #loadDataWithBaseURL
在显示content
时考虑使用WebView#loadDataWithBaseURL - 它表现得更好。
答案 1 :(得分:0)
您需要致电responseEntity.getContent()
以获取 InputStream 中针对您请求的网址的回复。以您的方式使用该流来根据需要显示数据。例如,如果预期数据是String,那么您可以使用以下方法将此流简单地转换为字符串:
/**
* Converts InputStream to String and closes the stream afterwards
* @param is Stream which needs to be converted to string
* @return String value out form stream or NULL if stream is null or invalid.
* Finally the stream is closed too.
*/
public static String streamToString(InputStream is) {
try {
StringBuilder sb = new StringBuilder();
BufferedReader tmp = new BufferedReader(new InputStreamReader(is),65728);
String line = null;
while ((line = tmp.readLine()) != null) {
sb.append(line);
}
//close stream
is.close();
return sb.toString();
}
catch (IOException e) { e.printStackTrace(); }
catch (Exception e) { e.printStackTrace(); }
return null;
}
答案 2 :(得分:0)
InputStream is = responseEntity.getContent();
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line="0";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
String result=sb.toString();
is.close();
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
您将拥有字符串“result”
中的所有内容