Autor
|
Tema: Ayuda envío archivo a web con C vía http (Leído 26,312 veces)
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
int main() { WSADATA wsa; struct sockaddr_in direccion; int sock, puerto=80; char buffer[200]; ssize_t n;
WSAStartup(MAKEWORD(2,0),&wsa);
if((sock=socket(AF_INET,SOCK_STREAM,0))==-1 ) { printf("Problema al crear el socket"); getch(); exit(0); } else { direccion.sin_family=AF_INET; direccion.sin_port=htons(puerto); direccion.sin_addr.s_addr=inet_addr(ip);
strcpy(buffer,"POST /index.php HTTP/1.0\r\n"); strcat(buffer,"Host: dominioweb.com\r\n"); strcat(buffer,"Context-type: application/x-www-form-urlencoded\r\n"); strcat(buffer,"Content-length: 34\r\n\r\n"); strcat(buffer,"nombre=yupiiii \r\n"); printf("%s",buffer);
if(connect(sock,(struct sockaddr*)&direccion,sizeof(direccion))==-1) { printf("Error al conectar"); getch(); exit(0); } printf("Conectado correctamente\n");
if((write(sock,buffer,strlen(buffer)))==-1) { printf("Error write"); getch(); exit(0); } printf("write realizado.\n"); } return 0; } Se crea el socket correctamente con la ip del servidor web y con su puerto 80, ahora bien el write da error no consigo enviar datos que me falla? gracias a todos por su ayuda, haber si lo consigo acabar
|
|
|
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
Mensajes: 3.412
ASMático
|
No es "write". Es "Send". write (sock ,buffer ,strlen(buffer ),0)
Y cuidado con el content-length. El content-length debe ser el tamaño exacto del cuerpo. En caso de " nombre=yupiiii", sería 14. Despues del body, no hace falta ningún \r\n. Una vez que el servidor lea todo el X caracteres del body (X == content-length), el resto lo va a ignorar. O más que ignorar, se lo puede tomar como otra petición. Y eso si, si el content-length es más grande que el contenido real, posiblemente el server se quede en espera y no te conteste.
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Gracias por tu ayuda compañero me esta siendo útil como aprendizaje, aunque sigue sin ir, te dare más detalles al respecto, es lo mínimo que puedo hacer. Este es el código php que corre en el index.php del servidor web: <?php $nombre=htmlspecialchars($_GET["nombre"]); $contenido=htmlspecialchars($_GET["contenido"]); $fp=fopen("./archivos/" . $nombre . ".txt","at"); fwrite($fp,$contenido); fclose($fp); ?> Entonces yo voy a mi página, pongo en la url las variables dentro de index.php y me crea un archivo con un nombre y un contenido, es simple, desde el navegador funciona sin problemas. htmlspecialchars recoge los valores de las variables en la url (nombre y contenido) y las asigna a otras variables nombre y contenido. El código actualizado del cliente que sube los datos es el siguiente: int main() { WSADATA wsa; struct sockaddr_in direccion; int sock, puerto=80; char buffer[200]; ssize_t n;
WSAStartup(MAKEWORD(2,0),&wsa);
if((sock=socket(AF_INET,SOCK_STREAM,0))==-1 ) { printf("Problema al crear el socket"); getch(); exit(0); } else { direccion.sin_family=AF_INET; direccion.sin_port=htons(puerto); direccion.sin_addr.s_addr=inet_addr(ip);
strcpy(buffer,"POST /index.php HTTP/1.0\r\n"); strcat(buffer,"Host: dominioweb.com\r\n"); strcat(buffer,"Context-type: application/x-www-form-urlencoded\r\n"); strcat(buffer,"Content-length: 25\r\n\r\n"); strcat(buffer,"nombre=nombre123correcto"); printf("%s",buffer);
if(connect(sock,(struct sockaddr*)&direccion,sizeof(direccion))==-1) { printf("Error al conectar"); getch(); exit(0); } printf("Conectado correctamente\n");
if((send(sock,buffer,strlen(buffer),0))==-1) { printf("Error send"); getch(); exit(0); } printf("send realizado.\n"); } return 0; }
Lo he compilado no da errores, la IP del servidor web es correcta, el programa no da ningun error y finaliza satisfactoriamente, sin embargo actualizo la web y no aparece ningún archivo ni ningún tipo de datos, algo ha fallado pues y con lo poco que se no tengo ni idea xP. Eso es todo compa espero que me podáis ayudar, gracias
|
|
|
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
Mensajes: 3.412
ASMático
|
|
Re:
« Respuesta #13 en: 22 Julio 2014, 10:40 am » |
|
Estás poniendo en el php $_GET[], cuando debería ser $_POST[]
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Gracias eso he puesto lo demás esta todo igual el programa se ejecuta bien pero sigue sin enviar datos :"""(((( 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.
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
no estás enviando nada bajo la variable "contenido"... ¿no será que te está creando el archivo pero lo deja vacío?
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
Nose trata de eso, no crea ningún archivo, el script funciona con solo poner el nombre (eso hace que cree un archivo con ese nombre y le añade terminacion txt), pero no se crea el archivo a pesar de que envio el nombre, si pongo solo nombre y no contenido da lo mismo ya lo probé xP, no se qué será si tuvieseis algunos apuntes sobre esto, me vendrían muy 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.
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Estás seguro de que tienes permisos de escritura para la ruta del archivo?
|
|
|
En línea
|
|
|
|
Kaxperday
Desconectado
Mensajes: 702
The man in the Middle
|
No debería de haber problemano he puesto ninguna restricción en ningún directorio, cuando probaba con el GET y metida las variables en la URL desde el navegador las recogia correctamente y se creaba el archivo con su contenido, ahora he cambiado el GET por el POST como dijisteis y el código ahí esta, solo he cambiado la esto: strcpy(buffer,"POST /index.php HTTP/1.0\r\n"); strcat(buffer,"Host: dominio.com\r\n"); strcat(buffer,"Context-type: application/x-www-form-urlencoded\r\n"); strcat(buffer,"Content-length: 42\r\n\r\n"); strcat(buffer,"nombre=nombre123correcto&contenido=123456"); printf("%s",buffer); Pero sigue sin funcionar, ideas?
|
|
|
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.
|
|
|
eferion
Desconectado
Mensajes: 1.248
|
Una pregunta tonta... en qué punto concreto has inicializado el socket. Algo del tipo:if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET){ }
Si no has inicializado el socket es como intentar escribir en un fichero que no has abierto.
Esta línea o su equivalente debería ir antes del "connect".Cierto, error mio, no lo ví y eso que estuve mirando el código con "tranquilidad". Un saludo.
|
|
« Última modificación: 23 Julio 2014, 10:39 am por eferion »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Messenger.UIAutomation ¿Como envio un archivo?
Scripting
|
markus_bitman
|
3
|
3,343
|
2 Febrero 2010, 08:58 am
por Tyrz
|
|
|
[C] Envió de archivo binario por HTTP
Programación C/C++
|
yeikos
|
6
|
4,398
|
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,742
|
4 Febrero 2011, 19:35 pm
por Edu
|
|
|
Como automatizar el envio de cabeceras HTTP ???
« 1 2 »
Desarrollo Web
|
cybero
|
10
|
6,471
|
28 Abril 2012, 18:16 pm
por _teiki
|
|
|
Envio de archivo sin nombre Telegram C#
.NET (C#, VB.NET, ASP)
|
rigorvzla
|
2
|
3,622
|
27 Junio 2018, 04:29 am
por rigorvzla
|
|