powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Авторизация в API Headhunter.ru через oauth 2.0
4 сообщений из 4, страница 1 из 1
Авторизация в API Headhunter.ru через oauth 2.0
    #38480224
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем, привет. "Пишу" програм... нет... хочу залогиниться в 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
Авторизация в API Headhunter.ru через oauth 2.0
    #38480437
Фотография May12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Авторизация в API Headhunter.ru через oauth 2.0
    #38527696
hahik2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Авторизация в API Headhunter.ru через oauth 2.0
    #38530293
hahik2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hahik2001,
p.s.

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


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