PDA

Просмотр полной версии : POST пакет "С"


demonoid
12.01.2007, 14:06
Задача такая :
Надо отправить POST запрос на "С"
запрос такого типа:

POST /file.html HTTP/1.0
Accept: */*
Referer: http://www.site.ru/file.html?lang=ua
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
User-Agent: Internet Explorer 6.0
Host: www.site.ru
Content-Length: 83
Pragma: no-cache
Cookie: countfile=1;
Connection: Keep-Alive

submitted=true&lang=ua&code=1124&message=Lolof
не могу найти мануал :( ,мож хто подкинет или примерчик ?

nerezus
12.01.2007, 14:16
Ищи мануал по сокетам.

Go0o$E
12.01.2007, 14:43
Поидее так.
char post[]="POST /file.html HTTP/1.0\r
Referer: http://www.site.ru/file.html?lang=ua\r
Accept-Language: ru\r
Content-Type: application/x-www-form-urlencoded\r
User-Agent: Internet Explorer 6.0\r
Host: www.site.ru\r
Content-Length: 83\r
Cookie: countfile=1;\r
Connection: Keep-Alive\r
\r
submitted=true&lang=ua&code=1124&message=Lolof";

send (socket, post, sizeof(post), 0);

demonoid
12.01.2007, 18:38
Ищи мануал по сокетам.
msdn.com облазил не смог найти :(

demonoid
12.01.2007, 18:55
Поидее так.
Можно попобродней структуру?
копилятор под win

nc.STRIEM
12.01.2007, 19:27
вот: http://forum.antichat.ru/thread27529.html

Go0o$E
12.01.2007, 19:33
Вот этот должен работать
Проверен на работоспособность, компилил под lcc.
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
SOCKET Connect(char *Host, short port){

WSADATA wsaData;
SOCKET Winsock;
struct sockaddr_in Winsock_In;
struct hostent *Ip;

WSAStartup(MAKEWORD(2, 2), &wsaData);
Winsock=WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, (unsigned int)NULL, (unsigned int)NULL);
if(Winsock == INVALID_SOCKET){
WSACleanup();
return -1;
}
Ip = gethostbyname(Host);
Winsock_In.sin_port = htons(port);
Winsock_In.sin_family = AF_INET;
Winsock_In.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)Ip->h_addr)));
if(WSAConnect(Winsock, (SOCKADDR*)&Winsock_In, sizeof(Winsock_In), NULL, NULL, NULL, NULL) == SOCKET_ERROR){
WSACleanup();
return -1;
}
return Winsock;
}
int main(void){
char packet[1024];
char param[128];
SOCKET socket;
wsprintf(param, "submitted=true&lang=ua&code=1124&message=Lolof");
wsprintf(packet, "POST /file.html HTTP/1.0\r\nAccept: */*\r\nReferer:

http://www.site.ru/file.html?lang=ua\r\nAccept-Language: ru\r\nContent-Type:

application/x-www-form-urlencoded\r\nUser-Agent: Internet Explorer 6.0\r\nHost: www.site.ru\r\nContent-Length:

83\r\nPragma: no-cache\r\nCookie: countfile=1\r\nConnection: Keep-Alive\r\n\r\n", (int)strlen(param), param);
socket = Connect("site.ru", 80);
if(socket == -1){
return 0;
}
send(socket, packet, (int)strlen(packet), 0);
return 0;

dexus
12.01.2007, 19:42
#define SENDBUF_LEN 512

void ComposeRequest(char* dest)
{
ZeroMemory(dest, SENDBUF_LEN);
lstrcpy(dest, "POST /file.html HTTP/1.0\r\n);
lstrcat(dest, "Referer: http://www.site.ru/file.html?lang=ua\r\n");
lstrcat(dest, "Accept-Language: ru\r\n");
lstrcat(dest, "Content-Type: application/x-www-form-urlencoded\r\n");
lstrcat(dest, "User-Agent: Internet Explorer 6.0\r\n");
lstrcat(dest, "Host: www.site.ru\r\n)";
lstrcat(dest, "Content-Length: 83\r\n");
lstrcat(dest, "Cookie: countfile=1;\r\n");
lstrcat(dest, "Connection: Keep-Alive\r\n\r\n");
lstrcat(dest, "submitted=true&lang=ua&code=1124&message=Lolof\r\n");
}

main ()
{
WSADATA theWSAData;
if (WSAStartup(WINSOCK_VERSION, &theWSAData) != 0)
{
printf("WSAStartup(): Initialization error\n");
return;
}
else
{
SOCKADDR_IN SCKT_ADDR;
SCKT_addr.sin_family = AF_INET;
SCKT_addr.sin_addr.s_addr = inet_addr("бла бла");
SCKT_addr.sin_port = htons(80);
//
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if (s != INVALID_SOCKET)
{
int s_rslt = connect(sn.s, (PSOCKADDR)&SCKT_ADDR, sizeof(SCKT_ADDR));
if (s_rslt != SOCKET_ERROR)
{
char sendbuf[SENDBUF_LEN];
ComposeRequest(sendbuf);
send(s, (char*)sendbuf, lstrlen(sendbuf), 0);
}
}
}
WSACleanup();
}

тип того
много lstrcat'ов - просто для наглядности

demonoid
12.01.2007, 20:00
.................................
#define SENDBUF_LEN 512
....................................

тип того
много lstrcat'ов - просто для наглядности
извините конечно но ошибок вы столько специально заделали чтобы помучался ? :)

dexus
12.01.2007, 20:40
пардон, переделывал из кода, где запрос вычисляется

очепятка:
lstrcpy(dest, "POST /file.html HTTP/1.0\r\n"); // кавычки

+ в коде не достает инклюда и дефайна. вот они

#define WINSOCK_VERSION 0x0002
#include <winsock2.h>

+ SCKT_addr.sin_addr.s_addr = inet_addr("бла бла"); // адрес сервера, к которому коннектимся, его надо подставить вместо бла-бла )))

под борланд С++ билдером все работает

demonoid
13.01.2007, 00:07
Вот этот должен работать
Проверен на работоспособность, компилил под lcc.
спапасибо,на работоспособность проверил в локелке всё супир :) +1

demonoid
13.01.2007, 14:55
Возник новый вопрос как получить ответ от сервера ?