HTTP запрос на C++
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
HTTP запрос на C++ - 2010-11-10 22:16:09.330000
|
|
|
rat_splinter
Сообщений: 40
Оценки: 0
Присоединился: 2007-12-15 02:23:31.840000
|
Добрый день! Пытаюсь написать маленькое прилажение суть которого отослать HTTP запрос, считать его и вывести в кансоль.. собственно сам код: #include <iostream>
#include <conio.h>
#include <string.h>
#include <stdio.h>
#include <winsock2.h>
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->h_addr_list[0],host->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++ нипайму… Зарание спасибо)
|
|
|
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 );
|
|
|
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++ хз какие нужны
|
|
|
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
|
|
|
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->h_addr_list[0],host->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" ?
|
|
|
RE: HTTP запрос на C++ - 2010-11-13 02:59:05.073333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Сообщением выше написано, как. P.S. ты элементы из массива удалять умеешь?
|
|
|
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);
...
|
|
|
|
|