Comment envoyer une image sur le protocole HTTP en C?
Je suis un étudiant de faire un serveur web, de l'exercice et j'ai besoin d'un peu d'aide.
J'ai mon serveur web fonctionne très bien pour les pages de texte, mais à chaque fois que le navigateur envoie une ---GET /img.jpg HTTP/1.1
demande, je ne sais pas comment le gérer. J'ai entendu le protocole HTTP est à base de texte, alors comment puis-je envoyer une image dans ma réponse HTTP?
Ici est un segment où je créer mon normal l'adresse HTTP de la réponse, j'ai l'intention d'utiliser readresult == 2
pour signaler une image.
if(readresult == 1){
sprintf(toreturn, "%s\r\n%s\r\n%s\r\n\r\n%s", "HTTP/1.1 200 OK", "Content-Type: text/html", "Connection: close", readpagestring);
returnflag = 1;
}
else if(readresult == 2){
returnflag = 2;
}
else{
sprintf(toreturn, "%s\r\n%s\r\n%s\r\n\r\n%s", "HTTP/1.1 404 Not Found", "Content-Type: text/html", "Connection: close", readpagestring);
returnflag = 0;
}
Et la fonction qu'il appelle
int readpage(char *readaddress, char *pagereturn){
FILE *inputfile = (FILE *)calloc(1,sizeof(FILE));
int flag;
int c;
int n = 0;
readaddress++;
inputfile=fopen(readaddress,"r");
if (inputfile==NULL){
FILE *missingfile;
missingfile=fopen("404.html","r");
while ((c = fgetc (missingfile)) != EOF){
*(pagereturn+n) = c;
n++;
}
flag = 0;
fclose (missingfile);
}
else{
while ((c = fgetc (inputfile)) != EOF){
*(pagereturn+n) = c;
n++;
}
flag = 1;
fclose (inputfile);
}
return flag;
}
Vous devez vous connecter pour publier un commentaire.
Vous devez retourner un
HTTP response
comme ceci: (très minime, vous pouvez ajouter tous les en-têtes que vous devez de toute façon)Évidemment, vous devez également définir le type de contenu en conséquence le type de votre image.
Vous pouvez créer les en-têtes avec un
sprintf
, puismemcpy
les données binaires de l'image juste après la dernière\r\n
S'assurer que
toreturn
tampon est assez grand.Les données de l'image est envoyée au client. Il n'est pas converti en texte, ou quoi que ce soit. Si vous utilisez le bon type de contenu, votre exemple est probablement déjà qui fonctionne pour les images.