Задать вопрос

Авторизация standalone приложения vk на java

Добрый день или вечер!

Тема довольно таки избитая, но конкретных решений не нашел.
habrahabr.ru/post/144813

Здесь у нас имеет неплохой пример:

HttpClient httpClient = new DefaultHttpClient();
// Делаем первый запрос
HttpPost post = new HttpPost("http://oauth.vk.com/authorize?" +
        "client_id="+client_id+
        "&scope="+scope+
        "&redirect_uri="+redirect_uri+
        "&display="+display+
        "&response_type="+response_type);
HttpResponse response;
response = httpClient.execute(post);
post.abort();
//Получаем редирект
String HeaderLocation = response.getFirstHeader("location").getValue();
URI RedirectUri = new URI(HeaderLocation);
//Для запроса авторизации необходимо два параметра полученных в первом запросе
//ip_h и to_h
String ip_h= RedirectUri.getQuery().split("&")[2].split("=")[1];
String to_h=RedirectUri.getQuery().split("&")[4].split("=")[1];
// Делаем запрос авторизации
post = new HttpPost("https://login.vk.com/?act=login&soft=1"+
        "&q=1"+
        "&ip_h="+ip_h+
        "&from_host=oauth.vk.com"+
        "&to="+to_h+
        "&expire=0"+
        "&email="+email+
        "&pass="+pass);
response = httpClient.execute(post);
post.abort();
// Получили редирект на подтверждение требований приложения
HeaderLocation = response.getFirstHeader("location").getValue();
post = new HttpPost(HeaderLocation);
// Проходим по нему
response = httpClient.execute(post);
post.abort();
// Теперь последний редирект на получение токена
HeaderLocation = response.getFirstHeader("location").getValue();
// Проходим по нему
post = new HttpPost(HeaderLocation);
response = httpClient.execute(post);
post.abort();
// Теперь в след редиректе необходимый токен
HeaderLocation = response.getFirstHeader("location").getValue();
// Просто спарсим его сплитами
access_token = HeaderLocation.split("#")[1].split("&")[0].split("=")[1];

но на первой же строке:
String HeaderLocation = response.getFirstHeader("location").getValue();
Выдает исключение NullPointerException. Вообще мы должны получить из этих хедеров ip_h и to_h, чтобы далее залогиниться, так как это метод как вы поняли не подразумевает браузер.
Вопрос как это исправить и поменялось ли что то с авторизацией vk? Может у кого то есть готовый пример на java. Или как эмулировать работу браузера, его оболочку? Вот например в c# есть элемент WebViev, что есть рабочее сейчас в java?
  • Вопрос задан
  • 13425 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
@sergofun Автор вопроса
Вопрос решен, смотрите в сторону javaFX и прилагающий к нему javaFXSceneBuilder для FXML файлов, там есть все необходимые компоненты и WebViev включительно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Есть рабочий пример авторизации на java, погуглите kate api, там вместе с библиотекой есть рабочий, красивый и аккуратный пример авторизации, в ней ничего абсолютно не менялось.
Ответ написан
Комментировать
@sergofun Автор вопроса
Если я не ошибаюсь то kate api для андроида и там есть такие элементы как webviev,я сейчас это и увидел в примере kate api
https://github.com/thest1/Android-VKontakte-SDK
У меня такого нету в NetBeans.
Извини, если я что то не доглядел в kate api, но никакого подобного кода для авторизации даже не увидел.
Ответ написан
saintbyte
@saintbyte
Django developer
Не издевайтесь вы так над ВК.
Обычный WebView кидаете на активити. Натравливаете его на
https://oauth.vk.com/authorize?client_id=111111111&scope=friends,notify,photos,photos,audio,video,docs,notes,pages,groups,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.5&response_type=token
 &revoke=1


Код примерно такой:
WebView wv = (WebView) this.findViewById(R.id.webView1);
		WebSettings webSettings = wv.getSettings();
		webSettings.setJavaScriptEnabled(true);
        wv.setHorizontalScrollBarEnabled(false);
        webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
		wv.setWebViewClient(new VkWebViewClient());
		wv.loadUrl("https://oauth.vk.com/authorize?client_id=111111&scope=friends,notify,photos,photos,audio,video,docs,notes,pages,groups,offline&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.5&response_type=token&revoke=1");


и VkWebViewClient
public class VkWebViewClient extends WebViewClient {
		public VkWebViewClient() {
			// TODO Auto-generated constructor stub
		}
	
		@Override
		public void onPageFinished(WebView view, String url)
		{
			Log.i("VkWebViewClient onPageFinished",url);
			if (url.contains("oauth.vk.com/blank.html#")) {
			        if (url.contains("error")) {
						// Error
					}
					else
					{
String ahrore = url.substring(url.indexOf("#")+1);
}
}
}


и из ahrore получаем user_id и токен для API =)
Ответ написан
Комментировать
@sergofun Автор вопроса
Все супер, я это знаю и об этом только и мечтаю)Скажите где взять WebView, не для android приложения, а для обычного десктоп windows??то что такое есть в андроиде я знаю.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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