我如何使用命令:HttpEntity?

时间:2012-03-13 07:07:05

标签: android https android-2.3-gingerbread

我希望通过这个问题解决我的长期问题,并希望你们能帮助,但首先;我连接到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网站,我该如何使用它?一些帮助和解释会很好:)

3 个答案:

答案 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”

中的所有内容