Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   POST пакет "С" (https://forum.antichat.xyz/showthread.php?t=31108)

demonoid 12.01.2007 14:06

POST пакет "С"
 
Задача такая :
Надо отправить 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

Цитата:

Сообщение от nerezus
Ищи мануал по сокетам.

msdn.com облазил не смог найти :(

demonoid 12.01.2007 18:55

Цитата:

Сообщение от Go0o$E
Поидее так.

Можно попобродней структуру?
копилятор под 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=Lolo f");
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

Цитата:

Сообщение от dexus
Код:

.................................
#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("бла бла"); // адрес сервера, к которому коннектимся, его надо подставить вместо бла-бла )))

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


Время: 11:37