 |
|

31.05.2009, 15:49
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
С нами:
10562786
Репутация:
537
|
|
спасибо
а если я пишу на С++ - я тоже должен использовать dos.h? это современный и актуальный метод?
|
|
|

31.05.2009, 16:12
|
|
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
С нами:
10216668
Репутация:
930
|
|
>а если я пишу на С++ - я тоже должен использовать dos.h?
Да
|
|
|

31.05.2009, 16:19
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами:
10386906
Репутация:
599
|
|
|
|
|

01.06.2009, 00:41
|
|
Новичок
Регистрация: 20.09.2008
Сообщений: 29
С нами:
9283783
Репутация:
13
|
|
У меня проблема хочу авторизоваться на сайте вконтакте средствами С++.
Отловив я все запросы что посылает мой браузер, и посылая их же в коде, в ответе получаю "400 bad reqest".
Вот код.
Код:
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
#include <ctype.h>
#define PORT 80
#define SERVERADDR "93.186.225.212" // Адрес сервера
#pragma comment(lib, "Ws2_32.lib") //либа
int main ( int argc, char* argv [ ] )
{
WSADATA wd;
char buff[100000];
char buff2[100000]=
{
"POST /login.php HTTP/1.1"
"Host: vkontakte.ru"
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008051206 Firefox/3.0 (.NET CLR 3.5.30729)"
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
"Accept-Language: ru,en-us;q=0.7,en;q=0.3"
"Accept-Encoding: gzip,deflate"
"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7"
"Keep-Alive: 300"
"Connection: keep-alive"
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
"X-Requested-With: XMLHttpRequest"
"Referer: http://vkontakte.ru/index.php"
"Content-Length: 71"
"Cookie: remixchk=5; remixautobookmark=2; remixlang=0"
"Pragma: no-cache"
"Cache-Control: no-cache"
"op=a_login_attempt&email=e-mail&pass=pass&expire=0"
};
printf ( "TCP Client \n" ); // ну, тут и так понятно
if ( WSAStartup ( 0x202, &wd ) )
{
printf ( " WSAStart error %d \n ", WSAGetLastError ( ) );
return -1;
}
SOCKET sock ;
sock=socket ( AF_INET, SOCK_STREAM, 0 );
if ( sock < 0 )
{
printf (" Socket ( ) error %d \n ", WSAGetLastError ( ) );
return -1;
}
sockaddr_in dest_addr;
dest_addr.sin_family=AF_INET; //инет коннектинг
dest_addr.sin_port=htons ( PORT ); //порт
HOSTENT *hst; // хост
if( inet_addr(SERVERADDR) != INADDR_NONE )
dest_addr.sin_addr.S_un.S_addr = inet_addr(SERVERADDR);
else if( hst=gethostbyname ( SERVERADDR ) )
( ( unsigned long * ) &dest_addr.sin_addr )[0]=((unsigned long** )hst->h_addr_list)[0][0];
else
{
printf( "invalid address %s \n", SERVERADDR );
closesocket( sock ) ;
WSACleanup();
return -1;
}
if(connect( sock, (sockaddr *)&dest_addr, sizeof(dest_addr) ))
{
printf (" Connect error %d \n ", WSAGetLastError ( ) );
return -1;
}
send( sock, buff2, sizeof(buff2), 0);
recv( sock, buff, sizeof(buff)-1, 0 );
printf("%s",buff );
printf("\n");
printf ("Connection with %s succesfully. quit - quit" , SERVERADDR );
return 0;
}
|
|
|

01.06.2009, 00:42
|
|
Познавший АНТИЧАТ
Регистрация: 23.08.2007
Сообщений: 1,237
С нами:
9851426
Репутация:
1676
|
|
Отловив я все запросы что посылает мой браузер, и посылая их же в коде, в ответе получаю "400 bad reqest".
Видимо дело в отсутствии переносов строк в запросе
|
|
|

01.06.2009, 01:43
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами:
10386906
Репутация:
599
|
|
ну зависит от деталей реадизации. если нада быстрый поиск, то все строки предварительно считываются, и составляется массив ключей вида struct Record {string name; unsigned long offset; unsigned int length;};
в массиве есесно отсортировано по смещению строки. дальше в массиве находишь нужное имя, берешь смещение и длину. вычисляешь размер части файла, которая лежит за этим куском кодом типа tail_length = file_size - (record.offset + record.length);
ну и переписываешь этот хвостик по смещению, на котором находилась старая запись. в конце устанавливаешь размер файла как file_size - record.length;
усе. если массив таких структур нельзя заводить, то соотв всю инфу нужно каждый раз получать из файла. т.е. считывать строки, искать нужный ключ, итп. лень кодить, ибо стока раз уже эту фигню делал студентам, что тошнит от нее
|
|
|

01.06.2009, 01:47
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами:
10386906
Репутация:
599
|
|
экранировать не нада. прально грят про перерды строк. а мне пора пожалуй спаьт =\
Последний раз редактировалось Ra$cal; 01.06.2009 в 02:12..
|
|
|

01.06.2009, 01:56
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
С нами:
9017461
Репутация:
414
|
|
Отловив я все запросы что посылает мой браузер, и посылая их же в коде, в ответе получаю "400 bad reqest".
Видимо дело в отсутствии переносов строк в запросе
Естественно. В конце каждого поля запроса у тебя не хватает \r\n
|
|
|

01.06.2009, 09:47
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
С нами:
10562786
Репутация:
537
|
|
а где можно взять Ws2_32.lib, чтобы потестить прогу Spy2ex'a?
|
|
|

01.06.2009, 10:18
|
|
Новичок
Регистрация: 20.09.2008
Сообщений: 29
С нами:
9283783
Репутация:
13
|
|
Сообщение от Дикс
а где можно взять Ws2_32.lib, чтобы потестить прогу Spy2ex'a?
В Visual Studio 8 установи и просто подключи.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|