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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Исходник для работы с HTTP (C++) (https://forum.antichat.xyz/showthread.php?t=129553)

s_p_a_m 13.07.2009 09:42

Исходник для работы с HTTP (C++)
 
может есть у кого сабж? нужен просто пример (желательно консоль) для отправки данных на серв и получение ответа. Например логин на сайт и получение удачно\неудочно ... и в соответствии с этим выполняем действие... если у кого есть поделитесь :)

POS_troi 13.07.2009 11:38

http://forum.sources.ru/index.php?showtopic=166220

посмотри


и вот еще в исходниках валялось
Код:

#include <stdio.h>
#include <winsock.h>
 
// Function prototype
void StreamClient(char *szServer, short nPort, char *szMessage);
// Helper macro for displaying errors
#define PRINTERROR(s)        \
                fprintf(stderr,"\n%: %d\n", s, WSAGetLastError())
 
 
 
////////////////////////////////////////////////////////////
 
void main(int argc, char **argv)
{
        WORD wVersionRequested = MAKEWORD(2,0);
        WSADATA wsaData;
        int nRet;
        short nPort;
 
        //
        // Check for the host and port arguments
        //
        if (argc != 4)
        {
                fprintf(stderr,"\nSyntax: client ServerName PortNumber Message\n");
                return;
        }
 
        nPort = atoi(argv[2]);
 
 
        //
        // Initialize WinSock and check the version
        //
        nRet = WSAStartup(wVersionRequested, &wsaData);
 
        //
        // Go do the stuff a stream client does
        //
        StreamClient(argv[1], nPort, argv[3]);
 
 
        //
        // Release WinSock
        //
        WSACleanup();
}
 
////////////////////////////////////////////////////////////
 
void StreamClient(char *szServer, short nPort, char *szMessage)
{
        printf("\nStream Client connecting to server: %s on port: %d",
                                szServer, nPort);
 
        //
        // Find the server
        //
    LPHOSTENT lpHostEntry;
 
        lpHostEntry = gethostbyname(szServer);
    if (lpHostEntry == NULL)
    {
        PRINTERROR("gethostbyname()");
        return;
    }
 
        //
        // Create a TCP/IP stream socket
        //
        SOCKET        theSocket;
 
        theSocket = socket(AF_INET,                                // Address family
                                          SOCK_STREAM,                        // Socket type
                                          IPPROTO_TCP);                // Protocol
        if (theSocket == INVALID_SOCKET)
        {
                PRINTERROR("socket()");
                return;
        }
 
        //
        // Fill in the address structure
        //
        SOCKADDR_IN saServer;
 
        saServer.sin_family = AF_INET;
        saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
                                                                                // ^ Server's address
        saServer.sin_port = htons(nPort);        // Port number from command line
 
        //
        // connect to the server
        //
        int nRet;
 
        nRet = connect(theSocket,                                // Socket
                                  (LPSOCKADDR)&saServer,        // Server address
                                  sizeof(struct sockaddr));// Length of server address structure
        if (nRet == SOCKET_ERROR)
        {
                PRINTERROR("socket()");
                closesocket(theSocket);
                return;
        }
 
 
        //
        // Send data to the server
        //
   
    char szBuf[256];
 
        // strcpy(szBuf, "From the Client");
        nRet = send(theSocket,                                // Connected socket
                                szMessage,                                        // Data buffer
                                strlen(szMessage),                        // Length of data
                                0);                                                // Flags
        if (nRet == SOCKET_ERROR)
        {
                PRINTERROR("send()");
                closesocket(theSocket);
                return;
        }
 
 
        //
        // Wait for a reply
        //
        nRet = recv(theSocket,                                // Connected socket
                                szBuf,                                        // Receive buffer
                                sizeof(szBuf)+1,                        // Size of receive buffer
                                0);                                                // Flags
        if (nRet == SOCKET_ERROR)
        {
                PRINTERROR("recv()");
                closesocket(theSocket);
                return;
        }
 
 
        //
        // Display the received data
        //
        printf("\nData received: %s", szBuf);
 
 
        closesocket(theSocket);
        return;
}


s_p_a_m 13.07.2009 12:00

это я так понял TCP/IP ? я не силен в С++ если можно то конкретно сорс по отправке ПОСТ на сервер. с меня +++, заранее спасибо

POS_troi 13.07.2009 12:17

как вариант - посмотри вот это..
если не то и никто не скинет еще ченить , то когда прийду домой, скину исходник програмулины (писал для партнерки одной, там все и GET и POST)

Код:


#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
#include <ctype.h>

#define PORT 80        //  Порт, через который идет подключение к серверу....21,80,25,110 и т.п.
#define SERVERADDR "77.91.229.20"    // Адрес сервера

int main ( int argc, char* argv [ ] )
{
    WSADATA wd;
    char buff[10000];
    char buff2[9000]= {
"POST /member.php HTTP/1.0\r\n"
"Host: www.haddan.ru\r\n"
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.13) Gecko/20080311 AdCentriaIM/1.7 Firefox/2.0.0.13\r\n"
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
"Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n"
"Accept-Encoding: gzip,deflate\r\n"
"Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n"
"Keep-Alive: 300\r\n"
"Connection: keep-alive\r\n"
"Referer: http://www.haddan.ru/\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 33\r\n\r\n"
"username=USER&passwd=PASS"
    };

    printf ( "TCP Client \n" ); // ну, тут и так понятно
    if ( WSAStartup ( 0x202, &wd ) )
    {
            printf ( " WSAStart error  %d \n ", WSAGetLastError ( ) );
            return -1;
    }

    SOCKET sock ;
    sock=socket ( AF_INET, SOCK_STREAM, 0 );
    if  ( sock < 0 )
    {
        printf (" Socket ( ) error    %d \n ", WSAGetLastError ( ) );
        return  -1;
    }

    sockaddr_in  dest_addr;
    dest_addr.sin_family=AF_INET; //инет коннектинг
    dest_addr.sin_port=htons ( PORT ); //порт
    HOSTENT    *hst;  // хост
    if( inet_addr(SERVERADDR) != INADDR_NONE )   
        dest_addr.sin_addr.S_un.S_addr = inet_addr(SERVERADDR);
    else if( hst=gethostbyname ( SERVERADDR ) )   
        ( ( unsigned long  * ) &dest_addr.sin_addr )[0]=((unsigned long** )hst->h_addr_list)[0][0];
    else
    {
            printf( "invalid address  %s \n", SERVERADDR );
            closesocket( sock ) ;
            WSACleanup();
            return  -1;
    }

    if(connect( sock, (sockaddr *)&dest_addr, sizeof(dest_addr) ))
    {
            printf (" Connect error  %d \n ", WSAGetLastError ( ) );
            return -1;
    }

    //sprintf( buff2, "GET /room/func/mine.php HTTP/1.1\r\nHost: haddan.ru\r\nConnection: Close\r\n\r\n");
    send( sock, buff2, sizeof(buff2), 0);
    recv( sock, buff, sizeof(buff)-1, 0 );
    //for(int i=0; i < strlen(buff); i++)
    //    if(isalnum(buff[i]) || buff[i] == '<'|| buff[i] == '>' || buff[i] == '/')
            printf("%s",buff );
    //    else
    //        continue;
        printf("\n");
    printf ("Connection with %s succesfully. quit - quit" , SERVERADDR );
    //int nsize;
    /*while( ( nsize = recv( sock, buff, sizeof(buff)-1, 0 ) ) != SOCKET_ERROR )
    {
            buff[ nsize ] =0;
            printf ( " S=>C: %s ", buff  ) ;
            printf ( "S<=C: " ) ;
            fgets ( &buff [0], sizeof( buff )-1, stdin );
            if  ( !strcmp ( &buff[0], "quit\n" ) )
            {
                    printf ( " Exit " );
                    closesocket ( sock ) ; //выход правильный
                    WSACleanup() ;
                    return 0;
            }
            send ( sock, &buff [ 0 ], nsize, 0 ) ;
      }*/

      //printf ( " Recv error  %d \n", WSAGetLastError ( )  );
      //closesocket ( sock ) ;
      //WSACleanup ( ) ;
      return 0;
}


s_p_a_m 13.07.2009 12:30

Цитата:

Сообщение от POS_troi
как вариант - посмотри вот это..
если не то и никто не скинет еще ченить , то когда прийду домой, скину исходник програмулины (писал для партнерки одной, там все и GET и POST)

спс, буду ждать


Время: 09:11