Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.07.2013, 20:46   #1
Just Script
Новичок
Джуниор
 
Регистрация: 26.07.2013
Сообщений: 1
По умолчанию вопрос - авторизация vk.com посредством сокетов

Пробую написать desktop приложение для взаимодействия с vk.com
Пишу без использования каких - либо классов веб-браузеров либо компонентов. Авторизация посредством лишь сокетов.
Т.е. формирую GET запрос - получаю ответ в виде html - страницы
------
Как мне сформировать POST запрос, и имитировать заполнение полей логин - пароль ?

исходник кода:
Код:
#include <winsock2.h>
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;


int main()
{


	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) 
	{
		cout << "WSAStartup failed.\n";
		system("pause");
		return -1;
	}


	SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	SOCKADDR_IN SockAddr;
	SockAddr.sin_port=htons(80);
	SockAddr.sin_family=AF_INET;
	struct hostent *host = gethostbyname("oauth.vk.com");
	SockAddr.sin_addr.s_addr = *( (unsigned long*)host->h_addr);


	cout << "Connecting...\n";
	if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0) 
	{
		cout << "Could not connect!\n";
		system("pause");
		return -1;
	}


	///http://oauth.vk.com/authorize?client_id=3782307&redirect_uri=https://oauth.vk.com/blank.html&response_type=token
	cout << "Connected.\n";
	char * request = "GET /authorize?client_id=3782307&" \
					 "redirect_uri=https://oauth.vk.com/blank.html&" \
					 "response_type=token " \
					 "HTTP/1.1\r\n" \
					 "Host: oauth.vk.com\r\n\r\n";

	send(Socket, request, strlen(request), 0);


	u_long argp = 1; //set non-blocking mode = 1
	int iResult = ioctlsocket(Socket, FIONBIO, &argp);
	if (iResult != NO_ERROR) 
	{
		cout << "ioctlsocket failed with error: "<< iResult << endl;
		return -1;
	}


	//set socket timeout
	fd_set masterfds,readfds;
	timeval timeout;      
	timeout.tv_sec = 2;
	timeout.tv_usec = 0;	

	//receive data
	int bufSize = 1024;
	char *buffer = (char*)malloc(sizeof(char) * bufSize);
	int nDataReceive = 0, nDataSize = 0;

	while (1) 
	{
		FD_ZERO(&masterfds);
		FD_SET(Socket,&masterfds);
		memcpy(&readfds,&masterfds,sizeof(fd_set));
		if (select(Socket, &readfds, NULL, NULL, &timeout) < 0)
		{
			printf("select error");
			return -1;
		}

		if (FD_ISSET(Socket, &readfds))
		{
			if ((nDataReceive = recv(Socket,(char*)buffer,bufSize,0)) < 0)
				break;
			nDataSize += nDataReceive;

			//cut buffer on the last lap
			for (int i = 0; nDataReceive<bufSize ? i <= nDataReceive-1 : i <= nDataReceive; i++)
			{
				cout<< (char)buffer[i];
			}
		}
		else
		{
			cout << "\n\n";
			cout << "Done. " << timeout.tv_sec << " seconds passed. Close connection.\n";
			cout << "Total " << nDataSize      << " bytes received.\n";
			closesocket(Socket);
			WSACleanup();
			break;
		}
	}

	system("pause");
	return 0;
}
Just Script вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос, авторизация и браузер jihot Работа с сетью в Delphi 9 19.05.2012 13:13
Правка EXE файла посредством bin/hex редактора. Вопрос о возможности увеличения длинны строки Вадим Мошев Общие вопросы по программированию, компьютерный форум 7 25.02.2012 00:02
Авторизация на yandex.money. Вопрос. webber9989 Работа с сетью в Delphi 4 11.08.2011 09:41
Вопрос: Авторизация IdHTTP и WebBrowser mental Работа с сетью в Delphi 3 14.02.2011 01:20
Клиент-серверное взаимодействие посредством использования сокетов Cantana Компоненты Delphi 2 18.02.2008 19:27