The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Ответы на POST запрос, HTTP/1.X 200 OK"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Ответы на POST запрос, HTTP/1.X 200 OK"  
Сообщение от 000 email on 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 байт сделал, чтобы отловить конец запроса... Так как иначе, он может прислать не полный буфер еще в середине отправки...
Пишу пока все в файл, не реазбирая... Сам файл мне пока не нужен, нужно лишь отправить браузеру команду для редиректа...
Подскажите

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Ответы на POST запрос, HTTP/1.X 200 OK"  
Сообщение от PS email(??) on 29-Фев-08, 08:30 
Ну вот например заголовки принимаемые браузером когда его редиректят.
Вам наверное достаточно выставить Response status 302 и отправить заголовок Location


(Response Status)    HTTP/1.1 302 Moved Temporarily
Cache-Control    private
Connection    close
Content-Length    2589
Content-Type    text/html; charset=UTF-8
Date    Fri, 29 Feb 2008 05:21:36 GMT
Location    https://login.xxxx.int/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Ответы на POST запрос, HTTP/1.X 200 OK"  
Сообщение от 000 email on 29-Фев-08, 17:33 
>[оверквотинг удален]
>Вам наверное достаточно выставить Response status 302 и отправить заголовок Location
>
>
>(Response Status) HTTP/1.1 302 Moved Temporarily
>Cache-Control private
>Connection close
>Content-Length 2589
>Content-Type text/html; charset=UTF-8
>Date Fri, 29 Feb 2008 05:21:36 GMT
>Location https://login.xxxx.int/

После приему всей информации отвечаю ему "HTTP/1.X 302 Moved Temporarily\r\nLocation: /index.htm\r\n\r\n"
Но на эту страницу не перекидывает, если работать с Mozilla и Firefox... В чем может быть дело? С Эксплорером все ок

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Ответы на POST запрос, HTTP/1.X 200 OK"  
Сообщение от Michelnok (??) on 29-Фев-08, 18:11 
>
>Location: /index.htm

В RFC написано:

Location       = "Location" ":" absoluteURI

Попробуй "Location: http://server/index.htm..."

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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