Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HTTP запрос через сокеты 
:(
    Опции темы
Hose
Дата 30.5.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 11.4.2006

Репутация: 1
Всего: 1



Приветствую.

Пишу cgi скрипт, который посылает HTTP запрос на сервер. Сам запрос состоит из вызова другого cgi скрипта. Первый скрипт дожен выдать ответ второго.
Пишу на C++ под unix. Пытался воспользоваться сторонними библиотеками для работы по HTTP, но не получилось. Решил реализовать через сокеты.

Вот код второго скрипта:

Код

#include "stdio.h"

int main(int argc,char** argv)
{
    printf("Content-type: text/html\n\n");
    printf("%s", argv[1]);
    return 0;
}

 


он просто возвращает то, что получил

посылаю серверу следующий запрос:

Код

GET /cgi-bin/answer.cgi?qwerty HTTP/1.0
Host: <тут имя хоста>
 


Запрос делаю при помощи Microsoft telnet.
Получаю, то что хочу.

Код

HTTP/1.1 200 OK
Date: Tue, 30 May 2006 11:19:59 GMT
Server: Apache/1.3.24 (Unix) AGAVA.Banners/1.10 rus/PL30.12
Cache-Control: max-age=86400
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Connection: close
Content-Type: text/html; charset=koi8-r
Last-Modified: Tue, 30 May 2006 11:19:59 GMT

<куча рекламы>
qwerty
 



теперь хочу сделать это в своем скрипте через сокеты


Код

int main(int argc,char** argv)
{
    if(argc != 2)
        return -1;

    // формируем сообщение, которое будем посылать
    CreatMessage(..., Message);

    // узнаем параметры хоста(нам нужен его IP) 
    struct hostent *phe = gethostbyname(HOSTNAME);

    int sock;
    struct sockaddr_in addr;

    // создаем сокет
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock < 0)
    {
        return ReturnEmpty();
    }

    // задаем параметры конекта
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT); // или любой другой порт...
    addr.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;

    if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        return ReturnEmpty();
    }

    // посылаем запрос
    send(sock, Message.c_str(), Message.length(), 0);

    // получаем ответ
    recv(sock, buf, 12550, 0);
    
    printf("Content-type: text/html\n\n");
    printf(buf);

    close(sock);

    return 0;
}
 


функция CreatMessage формирует запрос, в точности совпадающий с запосом, который я делал через telnet

вызываю этот скрипт через тотже telnet
В результате

Код

HTTP/1.1 200 OK
Date: Tue, 30 May 2006 11:41:32 GMT
Server: Apache/1.3.24 (Unix) AGAVA.Banners/1.10 rus/PL30.12
Cache-Control: max-age=86400
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Connection: close
Content-Type: text/html; charset=koi8-r
Last-Modified: Tue, 30 May 2006 11:41:47 GMT

<тут куча рекламы>

 HTTP/1.1 200 OK
 Date: Tue, 30 May 2006 11:31:10 GMT
 Server: Apache/1.3.24 (Unix) AGAVA.Banners/1.10 rus/PL30.12
 Cache-Control: max-age=86400
 Expires: Thu, 01 Jan 1970 00:00:01 GMT
 Connection: close
 Content-Type: text/html; charset=koi8-r
 Last-Modified: Tue, 30 May 2006 11:31:10 GMT
 



а где то, что выдает второй скрипт?("qwerty")
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0957 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.