The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Ответы на POST запрос, HTTP/1.X 200 OK, !*! 000, 28-Фев-08, 15:21  [смотреть все]
Добрый день, дорогие коллеги...

Прежде чем задать этот вопрос, много искал на форумах и читал RFC... На форумах ничего не нашел, а в RFC все вроде бы понятно в теории, а в практике...
Ну да ладно... К делу

Принимаю от браузера файл методом POST, принял все хорошо... Теперь надо ответить... И не просто ОК, а сказать ему, чтобы он запросил следующую страницу...

В RFC2616 написано примерно следующее


Цитата
* 1xx: Информационный — Запрос получен, процесс продолжается
* 2xx: Успех (Success) — Запрос успешно получен, понят и воспринят
* 3xx: Переадресация (Redirection) — Нужны дополнительные действия для завершения выполнения запроса
* 4xx: Ошибка клиента (Client Error) — Запрос содержит синтаксическую ошибку или не может быть выполнен
* 5xx: Ошибка сервера (Server Error) — Сервер не смог выполнить корректный запрос


видимо мне нужно использовать что-то из 3хх

Цитата
| "300" ; Multiple Choices
| "301" ; Moved Permanently
| "302" ; Moved Temporarily
| "303" ; See Other
| "304" ; Not Modified
| "305" ; Use Proxy

Мне нужно, чтобы браузер отправил следующий запрос на какую-нибудь страницу... типа http://www.blablabla.ru
Тоесть нужно отправить ему не HTTP/1.X 200 OK, а что-то более интересное
Бился бился... Пробовал с "302" ; Moved Temporarily и с 301, но что-то никак...

Написал тестовое приложение... Криво конечно и без излишества, но проверять на нем монжо
Пока отправляю ему HTTP/1.X 200 OK, что ему отправить, чтобы сделать редирект, о котором я писал вышел?


Код
#include <iostream>
#include <fstream>
#include <string>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

const int BUFSIZE=8;

int main()
{
    int sock, listener;
    struct sockaddr_in addr;
    int bytes_read;
    char buf[BUFSIZE];

    listener = socket(AF_INET, SOCK_STREAM, 0);
    if(listener < 0)
    {
        perror("Socket create error!!!");
        return 1;
    }
    
    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    if(bind(listener, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
        perror("Socket bind error!!!");
        return 2;
    }

    listen(listener, 1);
    
    while(1)
    {
        sock = accept(listener, NULL, NULL);
        if(sock < 0)
        {
            perror("Socket listening error!!!");
            return 3;
        }


    std::ofstream result("/tmp/test_driver", std::ios::binary);

    bytes_read=0;
    int read = BUFSIZE;
    while(BUFSIZE==read)
    {
        read=recv(sock,buf, BUFSIZE, 0);
        result.write(buf,read);
        bytes_read+=read;
        std::cout<<read<<std::endl;
    }
    
    result.close();

    std::cout<<"Bytes recieved: "<<bytes_read<<std::endl;    

    std::string send_ = "HTTP/1.X 200 OK";

    send(sock,send_.c_str(),send_.size(), 0);

        close(sock);

    }
    return 0;
}


Буфер 8 байт сделал, чтобы отловить конец запроса... Так как иначе, он может прислать не полный буфер еще в середине отправки...
Пишу пока все в файл, не реазбирая... Сам файл мне пока не нужен, нужно лишь отправить браузеру команду для редиректа...
Подскажите




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру