[mdk-re] HTTP, c++ и Linux

=?iso-8859-1?q?denf_=CE=C1_novosoft=2Eru?= =?iso-8859-1?q?denf_=CE=C1_novosoft=2Eru?=
Вт Дек 12 15:39:01 MSK 2000


Добрый день!

12/12/2000 05:34:36 PM mandrake-russian-admin wrote:
>Здравствуйте, Господа!
>
>Сразу  хочу  извиниться  за  оффтопик,  но, к сожалению, не смог найти
>нужную  мне  информацию  в  других местах. Здесь, вероятно, есть много
>программистов.  Может  кто-нибудь  мне подскажет, как на Си под Линукс
>написать  программу, которая соединяется в WWW сервером на 80-ом порту
>и  посылает  туда  запросы  (GET,  POST).  Или  посоветуйте, где можно
>что-нибудь  почитать  на  эту  тему. А, может быть, у кого-нибудь есть
>что-нибудь  похожее.  Ответ сервера сохранять не нужно, важен сам факт
>подачи запроса. Пожалуйста помогите, очень нужно.

Примерно вот так:

    const char hostname[] = "localhost";
    struct sockaddr_in addr;
    int sock;
    char result[1024];
    FILE *conn;

    struct hostent* host = gethostbyname( hostname );
    sock = socket( PF_INET, SOCK_STREAM, IPPROTO_IP );

    addr.sin_port = htons(80);
    addr.sin_addr.s_addr = *(unsigned long*) host->h_addr;
    addr.sin_family = AF_INET;

    if ( connect( sock, (struct sockaddr*) &addr, sizeof(addr) ) ) {
        perror( "cannot connect()" );
        exit(1);
    }

// соединение установлено, можно писать/читать различными способами
(send/recv) или (write/read). Ответ сервера надо прочитать, даже если он не
нужен.

    conn = fdopen( sock, "r+" );

    fprintf( conn, "GET / HTTP/1.0\n\n" );
    fflush( conn );

    while( !feof(conn) ) {
        fgets( result, sizeof(result), conn );
        printf( "%s", result );
    }

    fclose( conn );

С уважением,
Денис.


Подробная информация о списке рассылки community