Как мне использовать команду: HttpEntity? - PullRequest
0 голосов
/ 13 марта 2012

Я хочу решить мою долгосрочную проблему этим вопросом и надеюсь, что вы, ребята, поможете, но во-первых;У меня были проблемы с подключением к самозаверяющему серверу сертификатов HTTPS в течение почти 3 недель.Несмотря на многочисленные решения, я не могу решить свою проблему.Вероятно, я не знал, как правильно его использовать, или не имел некоторых файлов или импортировал правильные библиотеки.

Я сталкивался с некоторыми сайтами, которые требуют от меня загрузить сертификат с сайта https, к которому я пытаюсь подключиться, и когда я это сделал.Я должен сделать несколько шагов, прежде чем смогу использовать созданный мной сертификат или хранилище ключей.Я получил это решение с этого сайта:

Android: доверие SSL-сертификатов

// 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?Как его использовать, если я хочу отобразить веб-сайт https в WebView?Некоторая помощь и объяснение было бы неплохо:)

Ответы [ 3 ]

4 голосов
/ 13 марта 2012

Если вы хотите, чтобы контент из 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

Попробуйте использовать WebView # loadDataWithBaseURL при отображении content - он ведет себя намного лучше.

0 голосов
/ 13 марта 2012
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"

0 голосов
/ 13 марта 2012

Вам нужно позвонить responseEntity.getContent(), чтобы получить ответ в InputStream на ваш запрошенный URL.Используйте этот поток на вашем пути, чтобы представить данные, как вы хотите.Например, если ожидаемые данные - 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;
}
...