Ayuda envío archivo a web con C vía http

Iniciado por Kaxperday, 20 Julio 2014, 12:23 PM

0 Miembros y 16 Visitantes están viendo este tema.

daryo

es que por cada imagen que descarga por cada archivo de la web hara una peticion adicional con todo lo que ello conlleva cabeceras contenido , etc etc. en live headers te muestra arriba de las cabezeras la url
deberia estar arriva del :
POST / HTTP/1.1

ya sabiendo  la url a la que debes hacerle esa peticion sabras cuales cabeceras extraer  ;)

una alternativa a los sockets es wininet(no se como se usa jeje pero esta hecho para ser mas sencillo que manejar sockets)que sin necesidad manejar directamente el protocolo http puedes interactual con este ( ademas te permite manejar cosas como(get post cookies etc) ftp )

un ejemplo:
http://msdn.microsoft.com/en-us/library/sb35xf67.aspx#_core_create_a_very_simple_browser

edito

aunque ya estando tan cerca no vale la pena aprender a usar wininet xD
buenas

Kaxperday

He cargado mi página con el mozilla y no me muestra nada elhttpheaders xD, de todas formas es normal pues tendremos que forzar la interacción  y eso yo no se como hacerlo según dijiste parece que se puede hacer con el programa pero yo no se como usarlo, sería pasarle unas variables con POST a la página con el programa y leer la cabecera que mete, bueno hasta mañana se seguirá en ello gracias.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

MinusFour

Puedes hacer un formulario post sencillo para comprobar si tu archivo.php funciona correctamente.

Código (HTML4Strict) [Seleccionar]

<!DOCTYPE html>
<html>
<head>
<title> Formulario de Prueba </title>
</head>
<body>
<form action="archivo.php" method="POST">
<input type="text" name="nombre"><br>
<input type="text" name="contenido"><br>
<input type="submit" value="Enviar">
</form>
</body>
</html>


Y también modifica tu archivo php así:

Código (php) [Seleccionar]

<?php
if(isset($_POST["nombre"])) { 
$nombre=htmlspecialchars($_POST["nombre"]);
$contenido=htmlspecialchars($_POST["contenido"]);
$fp=fopen("./archivos/prueba.a","wt");
if($fp) {
fwrite($fp,$prueba);
fclose($fp);
} else {
echo "ERROR ABRIENDO ARCHIVO";
}
}
?>

ivancea96

#53
Kaxperday, sí leí tus mensajes. fue lo que respondí en el último post, que con esos 3 fields en el header llegaba.
Usa un programa como el WPE para ver qué es lo que envía tu cliente, porque algo raro hay. Revisa cual es el content length que envía, y si es necesario, ponlo tú a mano.

Kaxperday

Respecto a lo de minosfour si que funciona el php correctamente, no es necesario hacer eso, pues antes con escribir las variables en el navegador creaba el archivo y todo bien solo que ahora cambié GET por POST lo demás es igual, debería ir.

Ivancea a ti te funciono con esos 3 campos solo?, probé a descargar el WPE y al descargar me salio como archivo malicioso, desde la página web del autor, no sé lo que está claro es que no se realiza correctamente el POST algo pasa desapercibido en el cliente, pues busqué con wireshark los POST y efectivamente conectaba a la IP de la web pero no estaba la cabecera en ningún paquete, sin embargo en otros POST no relacionados si aparecía. Que puede fallar en ese programa en C me pregunto.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

Olle olle, tu código funciona perfectamente. Si al usarlo tú, no te va, quizás sea cosa del cortafuegos, del router, o del compilador.

Ante todo sepas, que tu código va perfectamente.

Kaxperday

#56
Ahhh me alegra oír eso, yo uso codeblocks que usa gcc compiler, puede que sea algo del firewall etc, probare a meter el programa en otro ordenador haber si le funciona.

Ahora bien, ya esta resuelto algo de vital importancia, como es enviar variables, ahora la idea de subir archivos como sería no hay alguna cabecera para mandar archivo directamente añadiendo algún campo en la cebecera, o tengo que ir cargando variables y subiendolas poco a poco, además como puedo controlar si hay posibles errores, me vendría muy bien saber algo de esto, muchas gracias.

PD: Ya os comentaré si me funcionó en otro ordenador.
PD: MIL gracias ivancea  :rolleyes:
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

Tal como lo tienes, no necesitarías cambiar nada.
Primero, lees el tamaño del archivo, y se lo sumas al contentlength. Envías la cabecera.
Luego, abres el archivo en stream, y vas enviando todos los bytes. Es solo eso.

Kaxperday

#58
mmm pero si el archivo tiene más caracteres de los que la URL tiene por límite?, cuando hacia get escribiendo las variables en navegador había limite.

ok saco los bytes del archivo, los paso al content length, pero no he entendido eso de abrir el archivo en stream xD lo demás si.

Edito: te refieres a meter todo el contenido del archivo en la cadena?. Otra cosilla caracteres como por ejemplo un espacio tendría que enviarlo como %24 no? gracias
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

Si no haces lo de specialchars, puedes enviar todo sin cifrar. simplemente, lo envías.
Con el método POST no tendrás problemas de tamaño en principio.