Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C] aprire file in lettura tramite http....

    ciao a tutti...devo aprire un semplice file di testo in lettura che si trova su un server http(es. http://www.sito.server.org/file.txt)....esiste una qualche funzione c simile alla fopen per fare questo???...sto usando il linguaggio C...l'obiettivo è quello di scandire questo file carattere per carattere e salvarlo in una stringa.....ciao e grazie anticipatamente

  2. #2
    è solo una idea che non ho provato.
    Prova ad aprire in scrittura un pipe con

    fp=popen ("telnet ip_sito 80 > out.txt", "r");

    e mandi lo standar out al file out.txt

    poi scrivi sul pipe con fput o fputs la stringa

    GET indirizzo_file_testo HTTP1.1

    poi invii una stringa vuota (fine dell'header)

    chiudi il pipe con

    pclose(fp);

    in out.txt hai il tuo output

    ciao
    sergio

  3. #3
    prima cosa....telnet non viene riconsciuto come comando interno....inoltre come faccio a specificare nella richiesta il file presente sul server??(http://www.sito.server.org/file.txt)...ciao

  4. #4
    se non hai telnet installato non è possibile.
    Devi aprire un socket.
    Se sai come aprire una connessione tcp l'operazione è abbastanza semplice.
    Devi aprire una connessione remota con il tuo server sulla porta 80 ed inviargli la tua richiesta.
    Il protocollo HTTP si aspetta che tu gli mandi il seguente comando
    GET indirizzo_file_testo HTTP1.1
    seguito da una riga vuota.
    indirizzo_file_testo è proprio file.txt (se questo si trova nella root del tuo server).
    Poi leggi la risposta del server che è proprio il file che vuoi
    ciao
    sergio

  5. #5
    codice:
    /*
    	client_http.c -- un semplice client http
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
    
    #define MAXDATASIZE 1000 // massimo numero di bytes che possiamo ricevere in una sola volta
    
    int main(int argc, char *argv[])
    {
    
    	int sockfd, numbytes;  
    
    	int portno = 80;	// la porta di comunicazione
    
    	char buf[MAXDATASIZE];
    
    	struct hostent *he;
    	struct sockaddr_in their_addr; // connector's address information 
    
    	if (argc < 2) {
    		fprintf(stderr,"Utilizzo %s Nome host (www.mio_server.com)\n", argv[0]);
    		exit(0);
    	}
    
    	if ((he = gethostbyname(argv[1])) == NULL) {  // get the host info 
    	    perror("gethostbyname");
    	    exit(1);
    	}
    
    	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    	    perror("socket");
    	    exit(1);
    	}
    
    	their_addr.sin_family = AF_INET;    
    	their_addr.sin_port = htons(portno);
    	their_addr.sin_addr = *((struct in_addr *) he->h_addr);
    
    	memset(their_addr.sin_zero, '\0', sizeof their_addr.sin_zero);
    
    	if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof their_addr) == -1) {
    	    perror("connect");
    	    exit(1);
    	}
    
     	char request[256];
     	char buffer[256];
    
    	int n;
     	printf("Introdurre la richiesta, prego : ");
     	bzero(buffer,256);
    
    	fgets(request, 255, stdin);
    
    	strcpy(buffer, "GET ");
    	strcat(buffer, request);
    	strcat(buffer, " HTTP1.1");
    	strcat(buffer, "\n");	
    
    	n = write(sockfd, buffer, strlen(buffer));
    
    	if (n < 0) 
    		perror("Errore di scrittura al socket");
    
    
    	if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
    	    perror("Errore di comunicazione nel ricevere i dati dal socket");
    	    exit(1);
    	}
    
    	buf[numbytes] = '\0';
    
    	printf(buf);
    	printf("\n");
    
    	return 0;
    
    }
    studiati questo codice che è una bozza di client http. Modifica MAXDATASIZE secondo le tue esigenze.
    Il testo che richiedi lo trovi nel buffer buf, da li in poi ne fai quello che vuoi, per adesso è semplicemente inviato allo standard out.
    ciao
    sergio

  6. #6
    Sotto Unix e derivati a tal scopo, può essere utile wget.

  7. #7
    sì, hai ragione, meglio di telnet
    codice:
    #include <stdio.h>
    
    int main (int argc, const char * argv[]) {
    	FILE *fp = popen("wget tuo_server/tuo_file_testo", "r");
    	pclose (fp);
            return (0);
    }
    e hai il file nella directory di lavoro.
    Oppure puoi usare le exec nelle loro varie incarnazioni.
    ciao
    sergio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.