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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CGI Headers, Корректно обрабатывается только первый. 
:(
    Опции темы
GarryFV
Дата 11.10.2002, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



При выводе на С нескольких Header-ов первый корректно обрабатывается сервером, а остальные понимаются просто как текст.
Краткий пример:

#include <stdio.h>
#include <fcntl.h>
#include <io.h>

#define header(STR) printf(STR); printf("%c%c",10,10);
#define br printf("<br>")

void main(void){
_setmode( _fileno( stdout ), _O_BINARY );

header("Server: NETstat/Forwarder/1.0 build: Jan 30 2001 00:00:01");
header("Connection: Close");
}


При просмотре из браузера видим:
Connection: Close

Тот же самый код на PHP, естественно, не выводит ничего, т.к. сервером обрабатываются оба Header-a.


Может знает кто в чем дело?
А может кто-нибудь еще и ответит :)) ?

Заранее спасибо.
PM MAIL   Вверх
Mike Kostyuhin
Дата 12.10.2002, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



#define header(STR) printf("%s\r\n", STR);
#define br printf("<br>")

void main(void){
_setmode( _fileno( stdout ), _O_BINARY );

header("Server: NETstat/Forwarder/1.0 build: Jan 30 2001 0001");
header("Connection: Close");
}
PM MAIL   Вверх
GarryFV
Дата 12.10.2002, 02:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ни фига!!

Internal Server Error

Так сервак вообще не воспринимает это как ответ cgi скрипта  :hmmm

В доке сказано - после header-a обязательно должна быть пустая строка
  Вверх
Fantasist
Дата 12.10.2002, 05:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



А
#define header(STR) printf(STR); printf("%c%c",13,13); ?
или
#define header(STR) printf(STR); printf("%c%c",13,10); ?
или
#define header(STR) printf(STR); printf("%c%c%c%c",13,10,13,10); ?


--------------------
Волны гасят ветер...
PM MAIL   Вверх
GarryFV
Дата 12.10.2002, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да не работает!

Первые 2 примера - просто ошибка исполнения скрипта:
500 Internal Server Error
т.к. после Headera обязательно должна быть еще одна пустая строка (а два CR(13) это просто "возврат каретки").

А когда есть пустая строка, то, как я говорил, обрабатывается только первый header.

Ну кто писал cgi на с, отзовитесь!
Или все на PHP, Perl-e и т.д. колбасят? :)

Ну ведь, очевидно, настолько простая вещь, что даже в мануалах не описана.
Или может какую настройку для Apache надо изменить?

Такая хрень и весь проект тормозит!!!
Помогите, братья программеры!!! :)
PM MAIL   Вверх
Fantasist
Дата 13.10.2002, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Хм, вроде было наоборот - 13 - перенос строки 10 - возврат каретки.
Или что, я всю жизнь ошибался?  :)

Вообще-то я не знаю откуда два хеадера. За всю свой небольшой опыт по HTTP, загаловок там всегда один. А зачем несколько загаловков?


--------------------
Волны гасят ветер...
PM MAIL   Вверх
GarryFV
Дата 13.10.2002, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Выходит, ошибался :)

Зачем два Header-a?
А если надо передать и "Server:..." и "Connection:..." и еще cookie записать
"Set-Cookie:..."?
То что делать?

Вот PHP код - как это должно быть на C?

header("Server: NETstat/Forwarder/1.0 build: Jan 30 2001 00:00:01");
               header("Connection: Close");
               header("Set-Cookie: netstat_ct=$sql_ClientId;expires=Fri, 30-Jan-2004 00:00:01 GMT;path=/;domain=.netstat.by");
               header('P3P: policyref="/w3c/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA"');
               header("Cache-Control: no-cache, must-revalidate");
               header("Pragma: no-cache");

P.S. А я CGI первый раз программлю - друг подкинул работенку - небольшой модулек с PHP на С перевести. Типа за пару дней один к одному переписать?

ВОт неделю уже трахаюсь, т.к. там оказалась и работа с БД MySQL и создание картинок "на лету" и т.д., блин ;).

Так все остальное дерьмо победил, а какие-то долбаные Header-ы не пашут,
аж обидно!!!!
PM MAIL   Вверх
Fantasist
Дата 13.10.2002, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Хе!
Так это-же один хеадер так тебя за ногу!


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Fantasist
Дата 13.10.2002, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Вот это я получил с сервера forum.vingrad.ru.

Цитата

HTTP/1.1 200 OK
Date: Sat, 12 Oct 2002 23:09:39 GMT
Server: Apache/1.3.26 (Unix) mod_perl/1.26 mod_throttle/3.1.2 PHP/4.2.2 FrontPage/4.0.4.3 mod_ssl/2.8.10 OpenSSL/0.9.6f
Last-Modified: Wed, 11 Sep 2002 04:19:08 GMT
ETag: "3a0175-161f-3d7ec43c"
Accept-Ranges: bytes
Content-Length: 5663
Keep-Alive: timeout=15, max=1000
Connection: Keep-Alive
Content-Type: text/html

<html>
<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta name="Description" content="Форум предназначен для обсуждения моментов программирования на: Perl, Delphi, C++, PHP, CGI, Visual Basic, ASM.  В нашем форуме большое кол-во активных участников - проффесионалов. Все это делает наш форум очень полезным">
<meta name="KeyWords" content="Perl, Delphi, C++, ASP, Java, PHP, CGI, Visual Basic, ASM - советы, помощь профессионалов, примеры, исходники, описание, алгоритмы, недокументированные возможности, секреты, хитрости, базы данных, вакансии, работа">
<title>Популярный форум программистов. C++, Delphi, Perl, Java, PHP, ASP, Visual Basic, CGI, ASM - советы, помощь профессионалов, исходники, примеры, описание</title>
</head>
..............................


Первый абзац - загаловок, второй - текст. И не могло быть по другому, потому как если ставить после каждой строчки пустую строку, то как тогда узнать что загаловок кончился.

 Ты просто так хитро вопрос поставил CGI headers, что я долго тормозил, не понимая о чем ты говоришь.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
GarryFV
Дата 13.10.2002, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, наверное так!!!
Я уже и сам стал думать, что этот чертов PHP интерпретатор все Header-ы в один объединяет, а потом выводит.

Только опять же, а мне как их разделять? Через ';' ?

printf("Server: NETstat/Forwarder/1.0 build: Jan 30 2001 00:00:01; Connection: Close; Set-Cookie: cookiethree=89\n\n");

Вот в этом случае, например, не записываются cookie :(

А если переставляю

printf("Set-Cookie: cookiethree=89; Server: NETstat/Forwarder/1.0 build: Jan 30 2001 00:00:01; Connection: Close\n\n");

то cookie записываются, но тогда у меня подозрение, что просто отрабатывает опять же только первый Header, а остальные хрен его знает...
PM MAIL   Вверх
GarryFV
Дата 13.10.2002, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тьфу ты, бл#!!!
Наконец то дошло!!!
После каждого Header-a(т.е. одной строки Header-a) надо "\n", т.е. 10
А после последней строки "\n\n", и все работает!!!

Через define-ы тут не сделаешь...

Ну спасибо тебе, добрый фей, если б рядом жили - пиво однозначно :)
А так только удовлетворение, что помог человеку :)
PM MAIL   Вверх
GarryFV
Дата 13.10.2002, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



P.S. Извиняюсь за жуткое ламерство, просто как говорил, первый раз пишу по надобности. Ни фига в этом вопросе не шарил :)  :p
PM MAIL   Вверх
Fantasist
Дата 13.10.2002, 04:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Цитата(GarryFV @ 12.10.2002, 19:31)
Тьфу ты, бл#!!!
Наконец то дошло!!!

Ну, слава богу.   :)


Цитата(GarryFV @ 12.10.2002, 19:31)

... первый раз пишу по надобности. Ни фига в этом вопросе не шарил


Так все и учимся.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
GarryFV
Дата 13.10.2002, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Учение - жизнь! Неучение - смерть.
Как только перестал что-то постигать, считай - помер :)).
PM MAIL   Вверх
Vaulter
Дата 14.1.2003, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ALL. полазил по сайтам - ненашел нормальных доков по CGI в С++
как начать? хочу =))


--------------------
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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