Получить содержимое запроса HTTPS GET в Android - PullRequest
2 голосов
/ 20 февраля 2012

У меня есть следующий код, который принимает нормальный HTTP-запрос GET и возвращает выходной html в виде строки.

public static String getURLContent(String URL){
        String Result = "";
        String IP = "http://localhost/";
        try {
            // Create a URL for the desired page
            URL url = new URL(IP.concat(URL));

            // Read all the text returned by the server
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            String str;
            while ((str = in.readLine()) != null) {
                // str is one line of text; readLine() strips the newline character(s)
                Result = Result+str+"~";
            }
            in.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Result;
    }

Я хотел бы реализовать то же самое для неподписанного сертификата ssl, но яЯ новичок в программировании на Java или Android, и некоторые предыдущие ответы на подобные вопросы очень сбивают с толку.

Может ли кто-нибудь изменить приведенный выше код для работы с HTTPS-запросами?

Еще один вопрос,был бы риск атаки среднего человека, если бы я отправил незашифрованные данные через запрос GET и распечатал записи базы данных на веб-странице, для которой функция возвращает содержимое.Было бы лучше использовать запрос POST?

Причина, по которой я решил использовать SSL, заключается в том, что кто-то сказал мне, что отправленные данные зашифрованы.Данные являются конфиденциальными, и если я отправлю что-то вроде localhost / login.php? User = jim & password = sd7vbsksd8, которое выдаст «user = jimmissions = admin age = 23», то есть данные, которые я не хочу, чтобы другие видели, просто лииспользовал браузер и отправил тот же запрос.

1 Ответ

1 голос
/ 20 февраля 2012

Попробуйте:

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
public class TestHttpGet {
    public void executeHttpGet() throws Exception {
        BufferedReader in = null;
        try {
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet();
            request.setURI(new URI("http://w3mentor.com/"));
            HttpResponse response = client.execute(request);
            in = new BufferedReader
            (new InputStreamReader(response.getEntity().getContent()));
            StringBuffer sb = new StringBuffer("");
            String line = "";
            String NL = System.getProperty("line.separator");
            while ((line = in.readLine()) != null) {
                sb.append(line + NL);
            }
            in.close();
            String page = sb.toString();
            System.out.println(page);
            } finally {
            if (in != null) {
                try {
                    in.close();
                    } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

Мы можем добавить параметры в HTTP-запрос Get, так как

HttpGet method = new HttpGet("http://w3mentor.com/download.aspx?key=valueGoesHere");
client.execute(method);

Android должен автоматически работать с ssl.Может быть, сертификат SSL, который вы используете на локальном хосте, не является доверенным?Проверьте это: Доверие всем сертификатам с использованием HttpClient через HTTPS

Проверьте, можете ли вы просматривать https://yourhost/login.php?user=jim&password=sd7vbsksd8 с помощью браузера.

...