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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda envío archivo a web con C vía http
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: 1 2 3 4 5 6 [7] 8 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda envío archivo a web con C vía http  (Leído 26,728 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #60 en: 29 Julio 2014, 22:10 pm »

Y para subirlo lo guardo todo el archivo en una cadena y hago el POST si es que es viable, o como es eso de abrir el archivo en stream?, soy muy pesado lo se xD.


En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #61 en: 29 Julio 2014, 22:38 pm »

abrirlo con fstream en caso de C++, o un FILE en C. O bueno, como quieras abrir el archivo xD El caso es que lo que leas, lo enviés por el socket.


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #62 en: 30 Julio 2014, 12:02 pm »

Supongo que esto debería funcionar:

Código:
archivo=fopen("archivito.txt","rt");
        while (fgets(cod, 100, archivo) != NULL)
        {
            strcpy(ced,"");
            strcat(ced,"nombre=archivo&contenido=");
            strcat(ced,cod);
            len=strlen(ced);
            itoa(len,cad,10);
            strcpy(buffer,"POST /script.php HTTP/1.0\r\n");
            strcat(buffer,"Host: mipagina.com\r\n");
            strcat(buffer,"Content-type: application/x-www-form-urlencoded\r\n");
            strcat(buffer,"Content-length: ");
            strcat(buffer,cad);
            strcat(buffer,"\r\n\r\n");
            strcat(buffer,ced);
            printf("%s\n",buffer);
       
            if(connect(sock,(struct sockaddr*)&direccion,sizeof(direccion))==-1)
            {
                printf("\nError al conectar.\n");
                exit(0);
            }
            printf("\nConectado correctamente.\n");

            if((send(sock,buffer,strlen(buffer),0))==-1)
            {
                printf("Error Send.\n");
                exit(0);
            }
        }

Que vaya enviando POST con el contenido del archivo hasta que se acabe, aunque no se como funciona pues no me va a mi el programa, lo que le falta es control de errores, puede que falle un POST en algún momento, y no se tiene en cuenta, por lo demás bien.
En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #63 en: 30 Julio 2014, 12:08 pm »

Solo tienes que mandar 1 post. Primero la cabecera entera, y luego lees el archivo
« Última modificación: 30 Julio 2014, 13:38 pm por Eternal Idol » En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #64 en: 30 Julio 2014, 12:19 pm »

XD te refieres en guardar el archivo entero en una cadena y enviarla como variable al servidor? Si el archivo es grande funcionará?, si es así perfecto  ;-)
En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #65 en: 30 Julio 2014, 12:58 pm »

Yo lo primero que hago, es leer el tamaño del archivo. Entonces, enviar la cabecera con el content-length calibrado.
Y luego, lees el archivo, y lo que lees lo envías. No hace falta guardarlo.
En línea

daryo


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #66 en: 30 Julio 2014, 14:55 pm »

mejor codificalo en base64 asi no tendras caracteres raros y en el servidor con php lo decodificas
En línea

buenas
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #67 en: 30 Julio 2014, 15:00 pm »

No hace falta codificar. Dado que es un archivo, los datos y los "caracteres raros" pasan sin problema.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #68 en: 30 Julio 2014, 16:08 pm »

Curioso, entonces como propones enviar el archivo a la vez que lo lees sin guardar lo que lees en variables. Es decir yo solo se subir variables con POST, para subir un archivo tendría que subir o una variable cargadísima con todo su contenido, o bien varias con poco contenido, pero haciendo varios POST, es eso correcto? Si a lo que te referias no es a ninguna de las 2 anteriores me gustaría conocer tu idea.
En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #69 en: 30 Julio 2014, 17:23 pm »

Casualmente acabo de termianr un servidor HTTP en C++. Y eso es justo lo que hago jaja

Para evitar tener una variable de 5 megas, o de 1 giga incluso, hago esto:

Código
  1. char arr[1024];
  2. ifstream f("...",ios::binary);
  3. while(!f.eof()){
  4.    f.read(arr,1024);
  5.    if(f.eof())
  6.        serv.send(0,string(arr,f.gcount()));
  7.    else
  8.        serv.send(0,string(arr,1024));
  9. }

Está en C++.
serv.send() es para enviarle a un cliente de mi servidor la string.
f.gcount() devuelve la cantidad de bytes leídos (en caso de no haber leído el tamaño del array (1024) )

Donde yo pongo serv.send(), tú pondrías send(socket,... ...).

Es eso, no más. Un dato importante: Si envías muchos datos rápidamente, send() puede devolver error WSAWOULDBLOCK. Por lo tanto, te aconsejo que coloques el socket como blocking antes de enviar.

Para ello, un snippet:
Código
  1. void setBlocking(SOCKET sock, bool blocking){
  2.    u_long block = blocking ? 0 : 1;
  3.    ioctlsocket(sock, FIONBIO, &block);
  4. }

Ese es un método de "partir" e ir enviando el archivo mientras lo lees.

Bueno, creo que eso es todo.
En línea

Páginas: 1 2 3 4 5 6 [7] 8 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Messenger.UIAutomation ¿Como envio un archivo?
Scripting
markus_bitman 3 3,368 Último mensaje 2 Febrero 2010, 08:58 am
por Tyrz
[C] Envió de archivo binario por HTTP
Programación C/C++
yeikos 6 4,441 Último mensaje 4 Mayo 2010, 23:45 pm
por yeikos
¿Como genero un archivo con un nombre por defecto y lo envió por ftp?
Scripting
sabeeee 3 2,778 Último mensaje 4 Febrero 2011, 19:35 pm
por Edu
Como automatizar el envio de cabeceras HTTP ??? « 1 2 »
Desarrollo Web
cybero 10 6,550 Último mensaje 28 Abril 2012, 18:16 pm
por _teiki
Envio de archivo sin nombre Telegram C#
.NET (C#, VB.NET, ASP)
rigorvzla 2 3,644 Último mensaje 27 Junio 2018, 04:29 am
por rigorvzla
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines