Harbour CGI con Apache/2.4.38 en Raspbian

quim
Mensajes: 31
Registered for: 3 years 4 months
Andorra

Harbour CGI con Apache/2.4.38 en Raspbian

Mensaje por quim »

Saludos al foro

Estoy intentando correr un CGI con puro Harbour, en una Raspberry Pi 3B con Debian
He instalado Apache2
He instalado los mod : header y cgi
He probado y funciona, el siguiente script, para descartar configuraciones de Apache

Código: Seleccionar todo

#!/bin/sh 
echo "Content-Type: text/html\n\n"
echo "<h1>Hello world</h2>"
He construido un ejecutable desde C y también funciona sin problemas

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{
	printf("Content-type:text/html\n\n");
	printf("<HTML><HEAD><TITLE>Nombre</TITLE></HEAD>");
	printf("<BODY BGCOLOR=\"#FFFFFF\"><P ALIGN=CENTER>");
	printf("<BR>SERVER_NAME = %s", getenv("SERVER_NAME"));
	printf("<BR>SERVER_SOFTWARE = %s", getenv("SERVER_SOFTWARE"));
	printf("<BR>REQUEST_METHOD = %s", getenv("REQUEST_METHOD"));
	printf("<BR>HTTP_REFERED = %s", getenv("HTTP_REFERED"));
	printf("<BR>SCRIPT_NAME = %s", getenv("SCRIPT_NAME"));
	printf("<BR>QUERY_STRING = %s", getenv("QUERY_STRING"));
	printf("<BR>REMOTE_HOST = %s", getenv("REMOTE_HOST"));
	printf("</P></BODY></HTML>");
}
Finalmente, he construido Harbour para Linux
El código PRG que estoy intentando es el siguiente :

Código: Seleccionar todo

function main()
	local cOut
	cOut := "Content-Type: text/html"+ hb_eol() + hb_eol()
	cOut += "<h1>Hello world</h2>"+ hb_eol()
	//fwrite(0, cOut )
	OutStd( cOut )
return nil
Una vez se ejecuta en navegador, el resultado es un error 500
Revisando el error.log de Apache

Código: Seleccionar todo

[http:error] [pid 1273:tid 1806656544] [client ::1:57902] AH02429: Response header '\x1b[0m\x1b[1;1H\x1b[?25hContent-Type' contains invalid characters, aborting request
Parece que la salida que produce harbour incluya carácteres no admitidos
He intentado guardar dicho PRG en distintos formatos, Unicodes UTF8 con BOM y sin él, ISOs, Windows... pero nada, la salida de la cadena 'Content-type' produce dichos carácteres en el header de la petición. Sin embargo, aparece correctamente si se ejecuta por cónsola.

Es posible que deba construir Harbour con 'algo' especial para la Raspi Debian ?

Cristobal
Site Admin
Mensajes: 315
Registered for: 3 years 6 months
Spain

Mensaje por Cristobal »

Hola Quim, gusto en saludarte
Has probado a poner simplemente

Código: Seleccionar todo

? cOut
O lo que estás ejecutando es el exe construído con el código que mencionas?, no me ha quedado muy claro.
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces

diegof
Mensajes: 42
Registered for: 3 years
Argentina

Mensaje por diegof »

Proba agregandole al proyecto...

REQUEST HB_GT_CGI_DEFAULT

y en vez de hb_eol() usa hb_OSNewLine()

Diego.
quim escribió: Jue Sep 02, 2021 9:54 am Saludos al foro

Estoy intentando correr un CGI con puro Harbour, en una Raspberry Pi 3B con Debian
He instalado Apache2
He instalado los mod : header y cgi
He probado y funciona, el siguiente script, para descartar configuraciones de Apache

Código: Seleccionar todo

#!/bin/sh 
echo "Content-Type: text/html\n\n"
echo "<h1>Hello world</h2>"
He construido un ejecutable desde C y también funciona sin problemas

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{
	printf("Content-type:text/html\n\n");
	printf("<HTML><HEAD><TITLE>Nombre</TITLE></HEAD>");
	printf("<BODY BGCOLOR=\"#FFFFFF\"><P ALIGN=CENTER>");
	printf("<BR>SERVER_NAME = %s", getenv("SERVER_NAME"));
	printf("<BR>SERVER_SOFTWARE = %s", getenv("SERVER_SOFTWARE"));
	printf("<BR>REQUEST_METHOD = %s", getenv("REQUEST_METHOD"));
	printf("<BR>HTTP_REFERED = %s", getenv("HTTP_REFERED"));
	printf("<BR>SCRIPT_NAME = %s", getenv("SCRIPT_NAME"));
	printf("<BR>QUERY_STRING = %s", getenv("QUERY_STRING"));
	printf("<BR>REMOTE_HOST = %s", getenv("REMOTE_HOST"));
	printf("</P></BODY></HTML>");
}
Finalmente, he construido Harbour para Linux
El código PRG que estoy intentando es el siguiente :

Código: Seleccionar todo

function main()
	local cOut
	cOut := "Content-Type: text/html"+ hb_eol() + hb_eol()
	cOut += "<h1>Hello world</h2>"+ hb_eol()
	//fwrite(0, cOut )
	OutStd( cOut )
return nil
Una vez se ejecuta en navegador, el resultado es un error 500
Revisando el error.log de Apache

Código: Seleccionar todo

[http:error] [pid 1273:tid 1806656544] [client ::1:57902] AH02429: Response header '\x1b[0m\x1b[1;1H\x1b[?25hContent-Type' contains invalid characters, aborting request
Parece que la salida que produce harbour incluya carácteres no admitidos
He intentado guardar dicho PRG en distintos formatos, Unicodes UTF8 con BOM y sin él, ISOs, Windows... pero nada, la salida de la cadena 'Content-type' produce dichos carácteres en el header de la petición. Sin embargo, aparece correctamente si se ejecuta por cónsola.

Es posible que deba construir Harbour con 'algo' especial para la Raspi Debian ?

quim
Mensajes: 31
Registered for: 3 years 4 months
Andorra

Mensaje por quim »

Cristobal escribió: Jue Sep 02, 2021 5:42 pm Hola Quim, gusto en saludarte
Has probado a poner simplemente

Código: Seleccionar todo

? cOut
O lo que estás ejecutando es el exe construído con el código que mencionas?, no me ha quedado muy claro.
Saludos igualmente Cristobal,

Lo que ejecuto es el binario construido con el codigo citado, es decir, un CGI por navegador

La salida tiene que ser la estándar, es decir, por OutStd(cString) o fwrite(0, cString)
Los comandos ? o funciones qout() qqout() producen la salida por consola, por lo que no son válidas para un CGI

Muchas gracias por tu interés !

quim
Mensajes: 31
Registered for: 3 years 4 months
Andorra

Mensaje por quim »

diegof escribió: Jue Sep 02, 2021 6:38 pm Proba agregandole al proyecto...

REQUEST HB_GT_CGI_DEFAULT

y en vez de hb_eol() usa hb_OSNewLine()

Diego.
Muchas gracias Diego por tu respuesta

Has dado en el clavo con la sentencia REQUEST HB_GT_CGI_DEFAULT

Funciona indistintamente con hb_eol() o con hb_OSNewLine()

Saludos

nikko1960
Mensajes: 8
Registered for: 3 years
Italy

Mensaje por nikko1960 »

Hola quimm

yo estoy usando harbour + apache + cgi, estas utsando sessiones o cookies o otra solucion ?

Responder