Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OAuth вконтакте, авторизация разработка приложения, WinSock, HTTP-headers etc 
:(
    Опции темы
magesi
  Дата 31.5.2012, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем!

Хотел написать свой мессенджер для контакта, чтобы не заходить на сайт, да и не хочется использовать готовые IM , чисто для себя и для практики хотелось.

Столкнулся с проблемой в сборке HTTP запроса в своем приложении, приведу код ( он тестовый , просто проверял ответ от сервера ):

Код

#include <iostream>
#include <WinSock2.h>

#pragma comment(lib, "Ws2_32.lib")

void PrintResponse(char mess[], int size)
{
    for(int i = 0; i < size; i++)
    {
        std::cout << mess[i];
    }

    std::cout;
}

int main(void)
{
    WSAData data;
    SOCKET sock;
    SOCKADDR_IN addr;

    char *ip = "93.186.231.220";
    u_short port = 0x50;
    int result;
    char buffer[0x400];
    char *mess = "POST /authorize HTTP/1.1\r\nHost: oauth.vk.com\r\nConnection: close\r\nCache-Control: no-cache\r\nContent-type: text/html\r\n\r\nclient_id=2976878&scope=photos&redirect_uri=http://oauth.vk.com/blank.html&display=DISPLAY&response_type=token";

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_port = htons(port);

    result = WSAStartup(0x202, &data);

    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    result = connect(sock, (sockaddr*)&addr, sizeof(addr));
    result = send(sock, mess, strlen(mess), 0);
    result = recv(sock, buffer, sizeof(buffer), 0);

    PrintResponse(buffer, result);

    return 0;
}


Как видно, я отправляю такой HTTP-request:
Код

POST /authorize HTTP/1.1\r\n
Host: oauth.vk.com\r\n
Connection: close\r\nCache-Control: no-cache\r\n
Content-type: text/html\r\n
\r\n
client_id=2976878&scope=photos&redirect_uri=http://oauth.vk.com/blank.html&display=DISPLAY&response_type=token


Ответ , который мне приходит от сервера вконтакте такой:
Код

HTTP/1.1 401 Unauthorized
Server: nginx/1.0.11
Date: Thu, 31 May 2012 02:28:48 GMT
Content-Type: application/json
Connection: close
X-Powered-By: PHP/5.3.3-7+squeeze3
Set-Cookie: remixlang=0; expires=Wed, 29-May-2013 20:58:32 GMT; path=/; domain=.
vk.com
Pragma: no-cache
Cache-control: no-store
Set-Cookie: remixchk=5; expires=Sun, 02-Jun-2013 12:46:32 GMT; path=/; domain=.v
k.com
Content-Length: 71

{"error":"invalid_client","error_description":"client_id is incorrect"}


Что-то не врублюсь. AppId перепроверил - верное, др. параметры тоже, сам HTTP-запрос , который я сформировал - тоже верный, если бы кривый был бы 401 ошибка не вернулась бы...

Нужно получить HTML-ответ от контакта в виде:
user posted image

Там , я уже по какому-нибудь алгоритму подстроки в строке разберу, что если я получаю такой ответ, то ОК! и сформирую новый запрос уже с логином/паролем.

Но, почему я получаю 401 ранее? Я перепроверил, все, как в инструкции:
http://vk.com/developers.php?id=-1_37230422&s=1

HTTP-запрос тоже верный, ибо 401 означает Unauthorized, если бы кривый был бы запрос, то получил бы Bad Request 400.

В чем проблема и как ее решить?

Это сообщение отредактировал(а) magesi - 31.5.2012, 05:34
PM MAIL   Вверх
borisbn
Дата 31.5.2012, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Не совсем в тему (возможно, даже совсем не в тему)...
А почему ты выбрал Си++ для web-приложения ?
Судя по скриншоту у тебя яблочная ОС, и предложить тебе оптимальный язык я не смогу (не знаю), однако могу сказать точно, что Си++ для этой цели - далеко не самое лучшее (возможно - худшее) средство. Посмотри на питон, например (насколько я знаю он есть для макОСи)


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
feodorv
Дата 31.5.2012, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(magesi @  31.5.2012,  06:33 Найти цитируемый пост)
сам HTTP-запрос , который я сформировал - тоже верный

Для POSt-запроса нужно указывать его длину.

Цитата(magesi @  31.5.2012,  06:33 Найти цитируемый пост)
Content-type: text/html\r\n

Это лишнее. Нужен как раз Content-length.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Amp
Дата 31.5.2012, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @  31.5.2012,  08:30 Найти цитируемый пост)
Судя по скриншоту у тебя яблочная ОС

Этот скриншот из вконтактовой документации smile

Добавлено через 11 минут и 33 секунды
С C++ и голыми сокетами будет весело. После посылки запроса должно будет произойти перенапраление на redirect_uri - этот момент нужно будет отловить. Еще, вроде как, нужна поддержка cookies. Потом надо будет разобрать пришедший html - понадобится парсер, придется копаться в каких-нибудь полуживых проектах на sf или googlecode.

На моей памяти одна опенсорсная софтина поступала с OAuth просто и незамыслвоато - открывала URL для запроса токена в небольшом окошке с webkit-ом и просила (!) пользователя скопировать то ли весь URL, то ли только токен в специально поле.
PM MAIL   Вверх
boostcoder
Дата 31.5.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(magesi @  31.5.2012,  05:33 Найти цитируемый пост)
char *mes

знакомый ник smile
PM WWW   Вверх
magesi
Дата 31.5.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(borisbn @  31.5.2012,  08:30 Найти цитируемый пост)
А почему ты выбрал Си++ для web-приложения ?

C чего Вы решили, что это будет именно браузерное приложение?

А что десктопные приложения не должны теперь работать?

Сейчас есть много игр 3D , которые сразу работает с контактом, одноклассниками и прочее... Чтобы делиться результатами.

IM типа QIP, которые дают возможность общаться вне браузера и прочее...

Вот , для таких целей и выбирают. А там может быть хоть: Си, паскаль, лисп и что сам пожелаешь...
Это другой вопрос уже...


Цитата(borisbn @  31.5.2012,  08:30 Найти цитируемый пост)
сказать точно, что Си++ для этой цели - далеко не самое лучшее (возможно - худшее) средство. Посмотри на питон, 

Вы не знаете финальной цели, а уже говорите заранее , так нельзя.

Добавлено через 2 минуты и 10 секунд
Цитата(borisbn @  31.5.2012,  08:30 Найти цитируемый пост)
Судя по скриншоту у тебя яблочная ОС

ога WinSock на Яблоке smile)) ( см. код )
PM MAIL   Вверх
borisbn
Дата 31.5.2012, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(magesi @  31.5.2012,  17:04 Найти цитируемый пост)
Вы не знаете финальной цели, а уже говорите заранее

Цитата(magesi @  31.5.2012,  05:33 Найти цитируемый пост)
Хотел написать свой мессенджер для контакта


Цитата(magesi @  31.5.2012,  17:04 Найти цитируемый пост)
ога WinSock на Яблоке

почему нет ? Хотя это - извращение.

Если уж очень хочется Си++, то посмотри в сторону 
http://qt-project.org/doc/qt-4.8/qauthenticator.html
http://qt-project.org/doc/qt-4.8/qnetworkrequest.html
http://qt-project.org/doc/qt-4.8/qnetworkreply.html
в частности и http://qt-project.org/doc/qt-4.8/modules.html в общем


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
magesi
  Дата 31.5.2012, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(borisbn @ 31.5.2012,  17:16)
Цитата(magesi @  31.5.2012,  17:04 Найти цитируемый пост)
Вы не знаете финальной цели, а уже говорите заранее

Цитата(magesi @  31.5.2012,  05:33 Найти цитируемый пост)
Хотел написать свой мессенджер для контакта


Цитата(magesi @  31.5.2012,  17:04 Найти цитируемый пост)
ога WinSock на Яблоке

почему нет ? Хотя это - извращение.

Если уж очень хочется Си++, то посмотри в сторону 
http://qt-project.org/doc/qt-4.8/qauthenticator.html
http://qt-project.org/doc/qt-4.8/qnetworkrequest.html
http://qt-project.org/doc/qt-4.8/qnetworkreply.html
в частности и http://qt-project.org/doc/qt-4.8/modules.html в общем

Я вообще-то с WinAPI без Qt/GTK и прочего собираюсь smile

Добавлено @ 17:23
Цитата(Amp @  31.5.2012,  12:40 Найти цитируемый пост)
понадобится парсер, придется копаться в каких-нибудь полуживых проектах на sf или googlecode.

в руки алгоритмы поиска подстроки в строке, типа КМП и БХ и самим писать класс парсера ( уже делал так при работе с pop3/imap для старого проекта )

Это сообщение отредактировал(а) magesi - 31.5.2012, 17:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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