Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Desktop клиент для Контакта, авторизация через HttpClient  
:(
    Опции темы
LSD
Дата 7.12.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Для начала надо разобраться, почему ты не получаешь редирект на login_success.html.

1. Проверь какой код возвращает executeMethod() он должен быть 3ХХ
2. Попробуй получить редирект от какого нибудь сокращателя ссылок.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Halavshik
Дата 9.12.2010, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



Народ, можно просьбу, как для идиота объясните по шагам как все это реализовать начиная со слов открываем новый проект в eclipse smile 

PM MAIL   Вверх
LSD
Дата 9.12.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 19
Всего: 538



Цитата(Atum @  3.12.2010,  20:13 Найти цитируемый пост)
locationHeader  null 

Для того чтобы он был не null надо надо отключить переход по редиректам:
Код

HttpClient httpClient = new HttpClient();
GetMethod method = new GetMethod("http://goo.gl/m4wUv");
method.setFollowRedirects(false);
int code = httpClient.executeMethod(method);
if (code >= 300 && code <= 399) {
    String redirectLocation;
    Header locationHeader = method.getResponseHeader("location");
    if (locationHeader != null) {
        redirectLocation = locationHeader.getValue();
        logger.info(redirectLocation);
    } else {
        logger.info("LocationHeader is null");
    }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
SaloS
Дата 27.1.2011, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 27.1.2011

Репутация: нет
Всего: нет



Привет, у меня также проблема с десктоп клиентом (хоть и на .NET). Я все получил, но при попытке отправить запрос к апи всегда выдается ответ Invalid signature. Я уже все перепроверил. Я смотрю флешевского клиента, на котором все работает стянул параметры, подставил, все совпадает. А с десктопа ни в какую. Прикол в том, что если не посылать sid такой же ответ. Проверил через снифер, сид отправляется.
Если у кого-то работает авторизация, можете проверить, что я не так делаю.
mid = 3943076
secret = e4d924d097
сигнатура считается для строки
3943076api_id=1890159fields=uid,first_name,last_name,nickname,sex,bdate,photo,photo_medium,photo_bigmethod=getProfilestest_mode=1uids=3943076v=3.0e4d924d097

Ответ с сервера
Код

<?xml version="1.0" encoding="utf-8"?>
<error>
 <error_code>4</error_code>
 <error_msg>Incorrect signature</error_msg>
 <request_params list="true">
  <param>
   <key>api_id</key>
   <value>1890159</value>
  </param>
  <param>
   <key>fields</key>
   <value>uid,first_name,last_name,nickname,sex,bdate,photo,photo_medium,photo_big</value>
  </param>
  <param>
   <key>method</key>
   <value>getProfiles</value>
  </param>
  <param>
   <key>test_mode</key>
   <value>1</value>
  </param>
  <param>
   <key>uids</key>
   <value>3943076</value>
  </param>
  <param>
   <key>v</key>
   <value>3.0</value>
  </param>
  <param>
   <key>sig</key>
   <value>0ffb823d4551260f32d501c188d09bed</value>
  </param>
  <param>
   <key>sid</key>
   <value>71b252ea47d3262667b3e4b45f4341bf1099bf9044e07e44b78038dc11</value>
  </param>
 </request_params>
</error>



Что я неправильно делаю я не пойму. Остается только возможность что я неправильно получаю secret и sid. Но как это проверить. Вроде сверялся, все правильно.

Добавлено через 5 минут и 40 секунд
Оказалось, надо было создать именно desktop приложение. Если использовать флеш - оно не хотело
PM MAIL   Вверх
kkorsakoff
Дата 31.1.2011, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 14



У меня получалось так: sid не шлю, sig шлю, mid не вставляю в подпись. Начинаю сразу с api_id.
MD5 беру от строки
Код

api_id=XXXXXXXfields=uid,first_name,last_name,nickname,domain,sex,bdate,city,country,timezone,photo,photo_medium,photo_big,has_mobile,rate,contacts,educationformat=JSONmethod=getProfilesuids=XXXXXXXv=3.0XXXXXXXXXXX

где XXX, понятно дело - реальные значения.
Запрос выполняю такой 
Код

http://api.vkontakte.ru/api.php?api_id=XXXXXXX&fields=uid,first_name,last_name,nickname,domain,sex,bdate,city,country,timezone,photo,photo_medium,photo_big,has_mobile,rate,contacts,education&format=JSON&method=getProfiles&sig=XXXXXXXXXXXXXX&uids=XXXXXX&v=3.0


Это сообщение отредактировал(а) kkorsakoff - 31.1.2011, 16:00
PM MAIL WWW ICQ   Вверх
gektor333
Дата 2.2.2011, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.2.2011

Репутация: нет
Всего: нет



Сталкнулся с проблемой из этой области:
Использую httpClient для парсинга страниц с целью поиска интересующей информации. Сайты, с которыми предстоит работать предоставляют сервис аналогично www.sciencedirect.com. На запрос каждой страницы генерируется мд5, который передается в качестве параметра запроса. Есть ли какая-то возможность програмно послать запрос на сервер для генерации мд5 нужной страницы? Думал, что можно запустить паука, который с главной страницы начнет ползти по всем ссылкам и записывать их в локальную базу данных... Как в таких случаях обработку проводят?
PM MAIL   Вверх
Atum
Дата 14.2.2012, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 3.10.2008

Репутация: нет
Всего: нет



За этот год все немного изменилось ! 

поэтому кто интересуется как создать клиента который бы постил новости на ленту группы отвечаю : 

(я использовал apache  HttpClient  и org.scribe)


Самое ценное - это получение Code -  функция которая работает в несколько этапов и ее нужно корректировать 
в зависимости от количества редиректов которые создает контакт
(если приложение не установлено - то в первый вызов надо добавить в код согласие на то что приложение получит права на доступ к вашим данным)


стандартная цепочка редиректов такая : (после того как ввели  https://api.vkontakte.ru/oauth/authorize)

Request URL:https://login.vk.com/?act=login&soft=1

Request URL:http://oauth.vkontakte.ru/oauth/authorize

Request URL:https://oauth.vkontakte.ru/grant_access

http://api.vkontakte.ru/blank.html#code=12a242bbf6de2285ce


В данном примере проблема с капчей не решается.

Код

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vkclient;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.scribe.builder.*;
import org.scribe.builder.api.*;
import org.scribe.model.*;
import org.scribe.oauth.*;
/**
 *
 * @author Atum
 */
public class NewMain {
  private static final String NETWORK_NAME = "Vkontakte.ru";
  private static final String PROTECTED_RESOURCE_URL = "https://api.vkontakte.ru/method/wall.post"; //wall.post //notes.add
  private static final String clientId = "";
  private static final String apiSecret = "";
  
  
  private static final Token EMPTY_TOKEN = null;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
     OAuthService service = new ServiceBuilder()
                                  .provider(VkontakteApi.class)
                                  .apiKey(clientId)
                                  .apiSecret(apiSecret)
                                  .scope("wall,offline,friends") // replace with desired scope notify,friends,wall,audio,notes,messages,offline
                                  .callback("http://api.vkontakte.ru/blank.html") //для приложения
                                  .build();
 
 
 
    String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
    String code = getCode(authorizationUrl);
    Verifier verifier = new Verifier(code);
    
    Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
    OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL);
  
    request.addBodyParameter("owner_id", "-clubID");
    request.addBodyParameter("from_group", "1");
    //attachments 
    request.addBodyParameter("attachments", "http://forum.vingrad.ru/");
    
    
    
    service.signRequest(accessToken, request);
    Response response = request.send();
      
    System.out.println(response.getCode());
    System.out.println(response.getBody());
    
  
    
    }
    
       public final static String getCode(String authorizationUrl) throws IOException{
           String code = null;
           
            DefaultHttpClient httpclient = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(authorizationUrl);

            
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String responseBody = httpclient.execute(httpget, responseHandler);

          String str_to = findKey(responseBody,"name=\"to\" value=\"","\"");
         
          HttpPost httppost = new HttpPost("https://login.vk.com/?act=login&soft=1");
         
                 List <NameValuePair> postform = new ArrayList<NameValuePair>(); 
         postform.add(new BasicNameValuePair("q", "1"));
         postform.add(new BasicNameValuePair("ip_h", "IP"));
         postform.add(new BasicNameValuePair("from_host", "api.vkontakte.ru"));
         postform.add(new BasicNameValuePair("to", str_to));
         postform.add(new BasicNameValuePair("expire", "0"));    
         postform.add(new BasicNameValuePair("email", "login")); 
         postform.add(new BasicNameValuePair("pass", "password")); 

         httppost.setEntity(new UrlEncodedFormEntity(postform, HTTP.UTF_8));
                 HttpResponse response = httpclient.execute(httppost);
         httppost.abort();
                 String HeaderLocation = response.getFirstHeader("location").getValue();
                 
                 httppost = new HttpPost(HeaderLocation);
         response = httpclient.execute(httppost);
         httppost.abort();
                 
                 HeaderLocation = response.getFirstHeader("location").getValue();
                 
                 
                 httppost = new HttpPost(HeaderLocation);
         response = httpclient.execute(httppost);
         httppost.abort();
                 
                HeaderLocation = response.getFirstHeader("location").getValue();
                
                code = HeaderLocation.split("=")[1];
            
         return code;
       }
    
  
    private static  final String findKey( String source, String patternbegin, String patternend )
    {
        int startkey = source.indexOf(patternbegin);
        if( startkey > -1 )
        {
            int stopkey = source.indexOf(patternend,startkey+patternbegin.length());
            if( stopkey > -1 )
            {
                String key = source.substring(startkey+patternbegin.length(), stopkey);
                return key;
            }
        }
        return null;
    }
    
}

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0827 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.