Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Авторизация в API Headhunter.ru через oauth 2.0 / 4 сообщений из 4, страница 1 из 1
27.11.2013, 16:37:34
    #38480224
May12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация в API Headhunter.ru через oauth 2.0
Всем, привет. "Пишу" програм... нет... хочу залогиниться в hh.ru через их api. Чувствую что без вас не справлюсь и по-этому "я к вам пишу".
Дело дошло до того что получен Authorization Code и теперь его нужно поментья на access_token (вот дока к hh api (читана-перечитана), ну а зарегистрировать своё приложение можно по адресу: https://dev.hh.ru). Сейчас проблема в следующем: Аксесс токен получить не могу т.к., по-моему, неправильно формируется ссылка:
https://m.hh.ru/oauth/token/

а по документации её вид должен быть аля:
grant_type=authorization_code&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&code={CODE}

1.Почему так?
2.Сразу на будущее спрошу как сделать чтобы тело запроса передавалось в стандартном
application/x-www-form-urlencoded с указанием соответствующего заголовка Content-Type (или в приведенном коде так и есть)?



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
package ru.nosite.updtapp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*Скачать библиотеку https://www.dropbox.com/sh/bb4kn78y8ve28s8/jitR6_m3Ey/org.apache.oltu.oauth2.client-0.31*/
import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
import org.apache.oltu.oauth2.client.response.OAuthJSONAccessTokenResponse;
import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
import org.apache.oltu.oauth2.common.message.types.GrantType;


public class HHClient {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws OAuthProblemException 
	 */

	
	
	public static void main(String[] args) throws IOException, OAuthProblemException {
		// TODO Auto-generated method stub
    OAuthJSONAccessTokenResponse response; 
		
		
try {
	
	/*Приложение направляет пользователя по адресу: https://m.hh.ru/oauth/authorize?response_type=code&client_id={CLIENT_ID}&state={STATE}. 
	 * Параметр state опционален, в случае его указания, он будет включен в ответный редирект — 
	 * После прохождения авторизации на сайте, мы запрашиваем у пользователя разрешение доступа приложения к его персональным данным.
	 */
	
 	OAuthClientRequest request = OAuthClientRequest
	   .authorizationLocation("https://m.hh.ru/oauth/authorize?response_type=code")
	   .setClientId("my_app_id")
	   .setState(null) 
	   .setResponseType("code")
	   .setRedirectURI("http://hmpg.net/")
	   .buildQueryMessage();
	
	System.out.println("\n[STEP] Grant access to app via URL:");
    System.out.println();
    System.out.println(request.getLocationUri());
    System.out.println();
 
    
    /*
    Если пользователь не разрешает доступ приложению, мы перенаправляем пользователя на указанный redirect_uri с ?error=access_denied и state={STATE},
    если таковой был указан при первом запросе.
    Иначе в редиректе мы указываем временный authorization_code:
    */
    
    try {
        java.awt.Desktop.getDesktop().browse(java.net.URI.create(request.getLocationUri()));
} catch (IOException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
}

    
    /*Присваиваем переменно code полученный  authorization_code*/
    System.out.println("\n[STEP] Get Authorization Code");
    System.out.println("Paste authorization code:");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String code = null;
    try {
                    code = br.readLine();
            } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                    return;
            }
    
    /*
     * Приложение делает сервер-сервер POST-запрос на 
     * https://m.hh.ru/oauth/token для обмена полученного authorization_code на access_token. 
     * В запросе необходимо передать:
       grant_type=authorization_code&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&code={CODE}
       Тело запроса необходимо передавать в стандартном 
       application/x-www-form-urlencoded с указанием соответствующего заголовка Content-Type.
     * 
     * */
    
    System.out.println("\n[STEP] Request Access Token");
    
 
    try {
        request = OAuthClientRequest
                .tokenLocation("https://m.hh.ru/oauth/token/")
                .setGrantType(GrantType.AUTHORIZATION_CODE)
                .setClientId("my_app_id")
                .setClientSecret("my_secret")
                .setCode(code)
                .buildBodyMessage();
} catch (OAuthSystemException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return;
}

System.out.println(request.getLocationUri()); //Вот здесь, мне кажется, ссылка неправильно формируется. Need help.



} catch (OAuthSystemException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
...
Рейтинг: 0 / 0
27.11.2013, 18:41:42
    #38480437
May12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация в API Headhunter.ru через oauth 2.0
May121.Почему так?
потому что если в
Код: java
1.
2.
3.
4.
5.
6.
7.
  request = OAuthClientRequest
                .tokenLocation("https://m.hh.ru/oauth/token/")
                .setGrantType(GrantType.AUTHORIZATION_CODE)
                .setClientId("my_app_id")
                .setClientSecret("my_secret")
                .setCode(code)
                .buildBodyMessage();


вместо метод .buildBodyMessage() заменить .buildQueryMessage(), то напечатается требуемый url.

Но все равно:
Код: plaintext
Connection timed out: connect
=((
...
Рейтинг: 0 / 0
16.01.2014, 03:34:28
    #38527696
hahik2001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация в API Headhunter.ru через oauth 2.0
May12,

System.out.println("\n[STEP] Request Access Token");


try {
/*Тело запроса необходимо передавать в
стандартном application/x-www-form-urlencoded с указанием
соответствующего заголовка Content-Type.*/
request.addHeader("Content-Type", "application/x-www-form-urlencoded");

request = OAuthClientRequest
.tokenLocation(" https://m.hh.ru/oauth/token/")
.setGrantType(GrantType.AUTHORIZATION_CODE)
.setClientId("my_app_id")
.setClientSecret("my_secret")
.setCode(code)
.buildBodyMessage();
} catch (OAuthSystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
...
Рейтинг: 0 / 0
18.01.2014, 01:56:45
    #38530293
hahik2001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация в API Headhunter.ru через oauth 2.0
hahik2001,
p.s.

Второй запрос надо отправлять методом POST в вашем коде если посмотрите в браузере он отправляет GET запрос и по этому не получает токен
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Авторизация в API Headhunter.ru через oauth 2.0 / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]