PDA

Просмотр полной версии : Генерация HTTP запросов на c++


Trinity
24.12.2005, 03:18
Искала, искала и ничего не нашла.. Мож кто знает как
отправить заголовки? Например эти:

POST *** HTTP/1.0
Accept: image/gif */*
Referer: ***
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FDM)
Host: ***
Content-Length: **
Pragma: no-cache
Cookie: language=ru

name=asavav&pass1=aaa&pass2=aaa


И чтобы он в какую-ниб. переменную ответ сервера записал

madnet
24.12.2005, 03:32
http://antichat.ru/inetcrack/

nerezus
24.12.2005, 07:52
boost.org

JazzzSummerMan
24.12.2005, 09:39
мэднет ну трините вроде как нужно знать как написать)
Алгол помню хотел написать такую статью по программированию чтобы работать с заголовками, расхотел наверно

Deem3n®
24.12.2005, 14:09
Вот (http://www.codeguru.com/cpp/i-n/internet/http/article.php/c8813/) статья с примером
А вот тут (http://www.codeguru.com/cpp/i-n/internet/) и тут (http://www.codeproject.com/internet/#HTTP+%2F+HTTPS) можно еще найти

qBiN
25.12.2005, 11:05
boost.orgНерезус нафига использовать буст то? Можно погемороится с winsock что я собственна щас и делаю))

nerezus
25.12.2005, 11:45
нафига использовать буст то? считаешь себя умнее профессиональных с++ кодеров?

Можно погемороится с winsock
а на линухе есть винсок?

SNK
25.12.2005, 23:43
Вот мизерный пример отправки HTTP запроса на C++


WSAData wsa;
SOCKET sock;
struct sockaddr_in addr;
char buffer[1024] = "GET http://antichat.ru/cgi-bin/s.jpg?test HTTP/1.0\r\nHost: www.antichat.ru\r\n\r\n";
struct hostent *host=NULL;
char shost[255] = "www.antichat.ru";
HANDLE hEvent;
if (WSAStartup(MAKEWORD(1, 1), &wsa) != 0)
{
AfxMessageBox("Can't load a correct version of WinSock");
return;
}

sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

if (sock == SOCKET_ERROR)
{
AfxMessageBox("Can't load WinSock");
}

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);
hEvent = CreateEvent(0,false,true,"");
WaitForSingleObject(hEvent,2000);
recv(sock,buffer,1024,0);
closesocket(sock);
WSACleanup();
SetDlgItemText(IDC_EDIT1,buffer);



buffer - HTTP запрос

Я знаю что это не лутший способ чтения ответа сервера но для примера пойдет...
Если нужна будет помощь пиши на мыло.

qBiN
26.12.2005, 14:42
а на линухе есть винсок?Вроде да.
считаешь себя умнее профессиональных с++ кодеров?Свой велосипед всегда удобнее...

nerezus
26.12.2005, 14:54
Вроде да. вдумайся: WinSock. Win. Windoze.

qBiN
26.12.2005, 15:10
Сокеты,хм,вдумайся на основе беркли,хм беркли - *BSD =)
Щас приведу маленький кусок из учебника от "BLACK SUN RESEARCH FACILITY"
the winsock API and in that document I mentioned that the windows Sockets
implementation is based on the Berkeley Sockets idea, therefore socket programming on
systems such as UNIX and Linux, which are also based on the Berkeley API would be quiet
similar. This aids us in porting from platform to platform, making it easy to move whole
programs from UNIX toТо есть код под винсок(1 версии) можно переделать под никсы с мельчайшими изменениями...

nerezus
26.12.2005, 15:12
дай мне такой код, и я поверю. А пока - не верю.

qBiN
26.12.2005, 15:20
дай мне такой код, и я поверю. А пока - не верю.Мне все равно веришь или нет =)

KEZ
20.01.2006, 19:22
начнем с того что в Windows нужна closesocket() а в unix - close()
в винде - WSAStartup(), WSACleanup(), в unix-не нужно

KEZ
20.01.2006, 19:24
причем в винде это API ф-ия а в Unix- syscall

ZaCo
20.01.2006, 20:40
дык ребят в никсах функции для работы с сетью ДАЖЕ в передаваемых параметрах не сильно отличаются от тех что в винсок - ибо билл хотел сделать все свое но так и не решился ;) так что явных отличий там нет...
2kez кажись в юнисе иницилизировать даже не нужно ;)
---
зы на правильность не проверял но кажись Snk привел отличный пример для виндоус...

qBiN
21.01.2006, 17:22
начнем с того что в Windows нужна closesocket() а в unix - close()
в винде - WSAStartup(), WSACleanup(), в unix-не нужно+отличия названия\путей хидеров + в никсах используются только write read в винде send recv