elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Protocolo HTTP, un dolor de cabeza...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Protocolo HTTP, un dolor de cabeza...  (Leído 4,998 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Protocolo HTTP, un dolor de cabeza...
« en: 1 Abril 2014, 02:45 am »

Buenas! Hace un buen tiempo que tengo este proyecto que quiero utilizar el protocolo HTTP para realizar peticiones al servidor, lo habia empezado con Sockets, luego por cansancio utilize wininet, ahora lo quiero/ tengo que poder hacer con sockets, el asunto es que estoy seguro que la peticion esta perfecta, el servidor responde 200 OK, pero el dato no llega.. dejo las cabeceras tal cual como las envio y como las envia el navegador (al navegador si le funciona >:( )

Asi la envio yo:

Citar
POST /php/core2.php HTTP/1.1
Host: www.elhost.com

User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.elhost.com/php/coso.html
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------78302333330941
Content-Length: 2
-----------------------------78302333330941
Content-Disposition: form-data; name="VAR"

TS
-----------------------------78302333330941--
Al final de cada linea hay un "\r\n" como es debido, eso lo puedo ver con Notepad ++

Asi la envia el navegador
Citar
POST /php/core2.php HTTP/1.1
Host: www.elhost.com
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.elhost.com/php/coso.html
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------78302333330941
Content-Length: 253
-----------------------------78302333330941
Content-Disposition: form-data; name="VAR"

TS
-----------------------------78302333330941--
Bueno, las diferencias como el Content-Length es porque el navegador también envía el botón submit (ya probé agregar eso a mi código, igualar los tamaños, aumentarlos, disminuirlos.. etc) Y el "\r\n" que hay después del "Host" es porque a mi no me funciona sin ese CRLF (también probé sacarlo, pero me dice BAD REQUEST)

Bueno, a lo que voy, estoy seguro que la cadena no esta mal, puede ser que tenga que crear el socket de alguna forma "especial" para este tipo de situaciones?

Yo lo creo asi:

Código
  1. SOCKET StartUpSocket()
  2. {
  3. int rtn;
  4.  
  5. if ((rtn = WSAStartup(MAKEWORD(2, 2), &WSA)) != 0) return 1;
  6. if ((Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) return 1;
  7.  
  8. HOSTENT *host = gethostbyname("www.elhost.com");
  9.  
  10. if (!host) return -1;
  11.  
  12. char *hostip = inet_ntoa(*(struct in_addr*)(host->h_addr_list[0]));
  13.  
  14. Server.sin_family = AF_INET;
  15. Server.sin_port = htons(PUERTO);
  16. Server.sin_addr.s_addr = inet_addr(hostip);
  17.  
  18. if ((rtn = connect(Socket, (struct sockaddr*) &Server, sizeof(Server))) == SOCKET_ERROR) return 1;
  19.  
  20. return Socket;
  21. }
  22.  

Y lo utilizo asi:

Código
  1. send(Socket, BUFFER, strlen(BUFFER), 0);

Donde BUFFER contiene toda la petición..

Esto me tiene bastante cansado, y me calienta no solucionarlo...
Saludos, gracias!


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Protocolo HTTP, un dolor de cabeza...
« Respuesta #1 en: 1 Abril 2014, 08:40 am »

estás haciendo una petición POST al servidor... yo probaría primero con una petición GET, que son más sencillas.

GET y POST son las formas de enviar información al servidor. Los parámetros que se pasan por GET van concatenados a la url, mientras que los que se envían por POST van en segundo plano. Es posible que tu problema sea que el servidor se quede esperando a que le lleguen los datos por POST y por eso no te responde correctamente.


En línea

ThePinkPanther

Desconectado Desconectado

Mensajes: 82



Ver Perfil
Re: Protocolo HTTP, un dolor de cabeza...
« Respuesta #2 en: 1 Abril 2014, 08:59 am »

hola..
no estoy muy familiarizado con la estructura de las cabeceras http,por lo visto en el codigo c, se puede apreciar q estas mandando bien la cadena,si usaste un archivo de texto para corroborar lo que estas enviando , y es identico a la cabecera que envias con el navegador,que de alguna forma la has capturado , los datos deberían llegar..
pues no creo q este fallando el socket, yo pienso que puede q tu cabecera este entrando con alguna anomalia al server..

como vuelvo a repetir,no se mucho de las cabeceras pero... lo unico q veo a simple vista que difiere lo que envias con lo q envia el navegador es los 2 espacios debajo de host,que no se si hacen al problema.

Citar
POST /php/core2.php HTTP/1.1
Host: www.elhost.com
//aca estan los 2 espacios en ( BUFFER )
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.elhost.com/php/coso.html
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------78302333330941
Content-Length: 2
-----------------------------78302333330941
Content-Disposition: form-data; name="VAR"

TS
-----------------------------78302333330941--

pues quisas el server te este cortando la cabecera allí . saludos
« Última modificación: 1 Abril 2014, 09:01 am por ThePinkPanther » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Protocolo HTTP, un dolor de cabeza...
« Respuesta #3 en: 1 Abril 2014, 11:22 am »

Pues vas a tener que depurar el código C/C++ así como el PHP ya que hay mucho que tomar en cuenta, nadie sabe que tipo,cantidad de
datos enviamos y recibimos, etc. porqué no intentas hacer unas simples peticiones con código lo más pequeño posible y luego vas
agregando más y más. si llegas al punto donde no sabes porqué del error entonces publicas el código completo aquí. No el proyecto
completo, sino un código más trabajable.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Protocolo HTTP, un dolor de cabeza...
« Respuesta #4 en: 1 Abril 2014, 13:44 pm »

Para poder solucionar el bad request, previo borrado del CRLF de mas que tenes en el Host, tenes que poner un CRLF justo antes de los datos.

Código
  1. char post_msg[] = {  
  2. "POST /php/core2.php HTTP/1.1\r\nHost: www.elhost.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3\r\nReferer: http://www.elhost.com/php/coso.html\r\nConnection: keep-alive\r\nContent-Type: multipart/form-data; boundary=---------------------------78302333330941\r\nContent-Length: 2\r\n\r\n-----------------------------78302333330941\r\nContent-Disposition: form-data; name=\"VAR\"\r\nTS\r\n-----------------------------78302333330941--\r\n"
  3. };

PD. Y si, la proxima vez hacela facil para nosotros y deja codigo funcional y que se comunique con un servidor real. Yo consegui pasar de un 400 a un 404 unicamente. Ah y le saque el encoding para ver que respondia el servidor ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Protocolo HTTP, un dolor de cabeza...
« Respuesta #5 en: 1 Abril 2014, 19:22 pm »

Gracias por responder compas! Es que puse ahi:

Citar
Bueno, las diferencias como el Content-Length es porque el navegador también envía el botón submit (ya probé agregar eso a mi código, igualar los tamaños, aumentarlos, disminuirlos.. etc) Y el "\r\n" que hay después del "Host" es porque a mi no me funciona sin ese CRLF (también probé sacarlo, pero me dice BAD REQUEST)

Y otra cosa:
Citar
el servidor responde 200 OK, pero el dato no llega

Esta bien, concuerdo en esto
Citar
PD. Y si, la proxima vez hacela facil para nosotros y deja codigo funcional y que se comunique con un servidor real. Yo consegui pasar de un 400 a un 404 unicamente. Ah y le saque el encoding para ver que respondia el servidor ...

Ahora me pongo a armar algo simple, es que me daba cosa poner el servidor, (nunca falta el chistoso...) voy a intentar con un hosting gratuito y actualizo..

Saludos!

Ha, quería aclarar esto:
Citar
estás haciendo una petición POST al servidor... yo probaría primero con una petición GET, que son más sencillas

Ya probé, con GET funciona, inclusive si uso una petición POST del tipo Clave-Valor, que seria asi: VAR=TS, pero usando Content-Type: application/x-www-form-urlencoded, (que es lo correcto cuando los datos viajan por POST en forma de Clave-Valor) funciona, de la única manera que no me funciona es la que tengo que usar, que ironía.. :-(
« Última modificación: 1 Abril 2014, 19:29 pm por Vaagish » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Protocolo HTTP, un dolor de cabeza...
« Respuesta #6 en: 1 Abril 2014, 19:36 pm »

¿Probaste con la cadena que deje? ¿Que resultado tuvo? 400 no puede ser ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Protocolo HTTP, un dolor de cabeza...
« Respuesta #7 en: 1 Abril 2014, 20:04 pm »

Citar
¿Probaste con la cadena que deje? ¿Que resultado tuvo? 400 no puede ser ...

Sep,, 400, pero si uso "\r\n\r\n" despues del host pasa a ser un 200 OK de respuesta, pero Content-Length: 0 :/
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Protocolo HTTP, un dolor de cabeza...
« Respuesta #8 en: 1 Abril 2014, 20:26 pm »

Sep,, 400, pero si uso "\r\n\r\n" despues del host pasa a ser un 200 OK de respuesta, pero Content-Length: 0 :/

Es que estas compensando el CRLF que te falta antes de los datos poniendolo despues del Host. ¿400 y que mas? ¿Copiaste y pegaste esa cadena exacta? A mi me da 404 al no existir el /php/core2.php ...


Ahora:
HTTP/1.1 404 Not Found
Date: Tue, 01 Apr 2014 18:30:39 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 211
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /php/core2.php was not found on this server.</p>
</body></html>


Antes:
HTTP/1.1 400 Bad Request
Date: Tue, 01 Apr 2014 18:32:55 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 335
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Request header field is missing ':' separator.<br />
<pre>
-----------------------------78302333330941</pre>
</p>
</body></html>
« Última modificación: 1 Abril 2014, 20:30 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Protocolo HTTP, un dolor de cabeza...
« Respuesta #9 en: 1 Abril 2014, 20:36 pm »

Citar
Es que estas compensando el CRLF que te falta antes de los datos poniendolo despues del Host.

Pero si siempre estuvo ese CRLF antes de los datos jaja
Aguantame 30' que subo a un hosting gratis y pongo todo el codigo "funcional"
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Dolor de cabeza
Multimedia
FernandoFackty 9 4,062 Último mensaje 25 Agosto 2006, 01:14 am
por Songoku
dolor de cabeza linux
GNU/Linux
Roboto 5 4,524 Último mensaje 12 Noviembre 2010, 22:47 pm
por Roboto
android sdk me causa dolor de cabeza...
Android
Kase 2 5,013 Último mensaje 30 Junio 2011, 05:38 am
por seba123neo
Gif en Internet Explorer... dolor de cabeza
Desarrollo Web
dimitrix 6 5,100 Último mensaje 27 Septiembre 2011, 21:47 pm
por dark_sargon
Modo protegido, dolor de cabeza « 1 2 3 4 »
ASM
lweb20 31 18,119 Último mensaje 4 Marzo 2013, 23:42 pm
por x64core
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines