Задать вопрос
ilyubayev
@ilyubayev
Software Engineer

Как авторизироваться на сайте по HTTPS в Android?

Есть цель - написать приложение на Android, которое будет авторизироваться на сайте (соот. имеем страницу с формой логина) и после получать приватную информацию, доступную после авторизации.
В данном случае имеем протокол HTTPS.
Какие методы подскажите? Библиотеки?
Было бы отлично увидеть примеры или какие-либо open source проекты.
  • Вопрос задан
  • 2813 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
ilyubayev
@ilyubayev Автор вопроса
Software Engineer
Много воды утекло со времен вопроса.
Использовать для http запросов в android стоит использовать HTTPUrlConnection - его рекомендует Google. HTTPClient - устаревшая библиотека.
Очень сильно помогла вот эта статья: www.mkyong.com/java/how-to-automate-login-a-websit...
Из библиотек я использовал: jsoup.com
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
3mph4515
@3mph4515
Хм, а в чем у Вас собственно загвоздка? Делаете не HHTPClient, а HTTPS по сертификату. С ним и работаете

Вот пример из моего проекта:

private static DefaultHttpClient getThreadSafeClientHTTPS(Context context)
			throws KeyManagementException, UnrecoverableKeyException, NoSuchAlgorithmException,
			KeyStoreException, java.security.cert.CertificateException, FileNotFoundException {
		KeyStore trustStore = KeyStore.getInstance("BKS");
		AssetManager assetManager = context.getAssets();
		InputStream instream = null;
		try {
			instream = assetManager.open("PATH TO CERT");
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		try {
			// password 
			trustStore.load(instream, PASSWORD HERE);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				instream.close();
			} catch (Exception ignore) {
			}
		}

		// Create socket factory with given keystore.
		SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
		socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
		Scheme sch = new Scheme("https", socketFactory, 443);

		HttpParams params = new BasicHttpParams();
		params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
		DefaultHttpClient client = new DefaultHttpClient(params);
		ClientConnectionManager mgr = client.getConnectionManager();
		params = client.getParams();

		int timeoutConnection = 10 * 1000;
		HttpConnectionParams.setConnectionTimeout(params, timeoutConnection);
		// Set the default socket timeout (SO_TIMEOUT)
		// in milliseconds which is the timeout for waiting for data.
		int timeoutSocket = 20 * 1000;
		HttpConnectionParams.setSoTimeout(params, timeoutSocket);
		client = new DefaultHttpClient(new ThreadSafeClientConnManager(params, mgr.getSchemeRegistry()),
				params);
		client.getConnectionManager().getSchemeRegistry().register(sch);
		return client;
	}
Ответ написан
Комментировать
Dreddik
@Dreddik
Устанавливать соединение и получать данные вам поможет URLConnection
Остальное дело техники.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы