Добрый день, дорогие коллеги...Прежде чем задать этот вопрос, много искал на форумах и читал 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 байт сделал, чтобы отловить конец запроса... Так как иначе, он может прислать не полный буфер еще в середине отправки...
Пишу пока все в файл, не реазбирая... Сам файл мне пока не нужен, нужно лишь отправить браузеру команду для редиректа...
Подскажите