Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

HTTP запрос на C++

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> HTTP запрос на C++
Имя
Сообщение << Старые топики   Новые топики >>
HTTP запрос на C++ - 2010-11-10 22:16:09.330000   
rat_splinter

Сообщений: 40
Оценки: 0
Присоединился: 2007-12-15 02:23:31.840000
Добрый день! Пытаюсь написать маленькое прилажение суть которого отослать HTTP запрос, считать его и вывести в кансоль.. собственно сам код:
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; #include &lt;winsock2.h&gt; int main() { WSAData wsa; SOCKET sock; struct sockaddr_in addr; char buffer[1024] ="GET /automation/n09230945.asp HTTP/1.1\r\nHost: www.whatismyip.com\r\n\r\n"; struct hostent *host=NULL; char shost[255] = "www.whatismyip.com"; WSAStartup(MAKEWORD(1, 1), &wsa) ; sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family = AF_INET; host = gethostbyname(shost); CopyMemory(&addr.sin_addr, host-&gt;h_addr_list[0],host-&gt;h_length); addr.sin_port = htons(80); connect(sock, (struct sockaddr *) &addr, sizeof (addr)); send(sock,buffer,sizeof(buffer),0); recv(sock,buffer,1024,0); closesocket(sock); printf(buffer); getch(); WSACleanup(); return 0; } Результат :HTTP/1.1 200 OK Date: Wed, 10 Nov 2010 19:11:51 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET Content-Length: 14 Content-Type: text/HТМL Set-Cookie: ASPSESSIONIDSQSBBDRA=NAGPGFFBOFBEJPCLCBKOOPAM; path=/ Cache-control: private 10.20.24.1 Проблема в том, что что в консоль мне нужно вывести не весть ответ сервера а лиш тело сообщения,т.е (10.20.24.1) В Delphi это выглядило бы приблизительно так :buffer:=copy(buffer,pos(#13#10#13#10, buffer )+4,length(buffer));а вот как парсить строки в C++ нипайму… Зарание спасибо)
Post #: 1
RE: HTTP запрос на C++ - 2010-11-10 22:42:35.033333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Воспользуйтесь функциями работы со строками.

P.S. вот это:

hEvent = CreateEvent(0,false,true,"");
WaitForSingleObject(hEvent,2000);
CloseHandle( hEvent );

можно спокойно заменить на Sleep( 2000 );
Post #: 2
RE: HTTP запрос на C++ - 2010-11-10 23:02:54.833333   
rat_splinter

Сообщений: 40
Оценки: 0
Присоединился: 2007-12-15 02:23:31.840000

quote:

ORIGINAL: _SaZ_

Воспользуйтесь функциями работы со строками.


Это понятно, а вот какими именно не понятно, т.е. если на delphi я знаю что нужно copy,pos и length то в C++ хз какие нужны
Post #: 3
RE: HTTP запрос на C++ - 2010-11-10 23:52:50.950000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
RTFM?

http://msdn.microsoft.com/en-us/library/f0151s4x.aspx
Post #: 4
RE: HTTP запрос на C++ - 2010-11-13 00:45:05.333333   
rat_splinter

Сообщений: 40
Оценки: 0
Присоединился: 2007-12-15 02:23:31.840000
заюзал strstr : int main() { WSAData wsa; SOCKET sock; struct sockaddr_in addr; char buffer[1024] ="GET /automation/n09230945.asp HTTP/1.1\r\nHost: www.whatismyip.com\r\n\r\n"; struct hostent *host=NULL; char shost[255] = "www.whatismyip.com"; WSAStartup(MAKEWORD(1, 1), &wsa) ; sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family = AF_INET; host = gethostbyname(shost); CopyMemory(&addr.sin_addr, host-&gt;h_addr_list[0],host-&gt;h_length); addr.sin_port = htons(80); connect(sock, (struct sockaddr *) &addr, sizeof (addr)); send(sock,buffer,sizeof(buffer),0); recv(sock,buffer,1024,0); closesocket(sock); printf(strstr(buffer,"\r\n\r\n")); getch(); WSACleanup(); return 0; } но ответ получается вместе с перводом каретки… ни подскажите как теперь выризать эти "\r\n\r\n" ?
Post #: 5
RE: HTTP запрос на C++ - 2010-11-13 02:59:05.073333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Сообщением выше написано, как.

P.S. ты элементы из массива удалять умеешь?
Post #: 6
RE: HTTP запрос на C++ - 2010-11-13 16:02:37.280000   
rat_splinter

Сообщений: 40
Оценки: 0
Присоединился: 2007-12-15 02:23:31.840000
ни умею(( матчасть по С плохо знаю паэтаму вилосипедостроением приходится заниматься вобщем в итоге получилось у меня вот так ... recv(sock,buffer,1024,0); char * pch1; pch1 = (char*)((ULONG)strstr(buffer,"\r\n\r\n") + (ULONG)4) ; printf(pch1); ...
Post #: 7
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> HTTP запрос на C++







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.