2016-11-12 37 views
0

我写了一个函数来检查HTTP服务器的文件类型(使用内容类型)。不过,我把这个作为全局变量,但是我阻止了HTTP和内容类型的行。从目录请求特定文件后,如何使用内容类型连接到HTTP服务器?

char * request_str; //= "HTTP/1.0 200 OK\r\n" 
     //"Content-type: text/html; charset=UTF-8\r\n\r\n"; 

,作为这样的文件类型检查为html,PNG,TXT,等,具有文件名,文件类型,以及request_str作为参数的函数。我希望request_str会在读取文件名/文件类型后返回,但我猜这是行不通的。

void get_filetype(char *filename, char *filetype, char *request_str) 
{ 
    if(strstr(filename, ".html")) 
    { 
     strcpy(filetype, "text/html"); 
     request_str = "HTTP/1.0 200 OK\r\n" 
        "Content-type: text/html; charset=UTF-8\r\n\r\n"; 
     return request_str; 
    } 
else if(strstr(filename, ".gif")) 
{ 
      strcpy(filetype, "image/gif"); 
    request_str = "HTTP/1.0 200 OK\r\n" 
          "Content-type: image/gif; charset=UTF-8\r\n\r\n"; 
    return request_str; 
} 
else if(strstr(filename, ".png")) 
    { 
     strcpy(filetype, "image/png"); 
    request_str = "HTTP/1.0 200 OK\r\n" 
          "Content-type: image/png; charset=UTF-8\r\n\r\n"; 
    return request_str; 
} 
else if(strstr(filename, ".jpg")) 
{ 
      strcpy(filetype, "image/jpg"); 
    request_str = "HTTP/1.0 200 OK\r\n" 
          "Content-type: image/jpg; charset=UTF-8\r\n\r\n"; 
    return request_str; 
} 
else 
{ 
    strcpy(filetype, "text/plain"); 
    request_str = "HTTP/1.0 200 OK\r\n" 
          "Content-type: text/plain; charset=UTF-8\r\n\r\n"; 
    return request_str; 
    } 
} 

我试图连接到服务器时,在服务器请求函数中有这个函数。我接近的问题是,当我在浏览器上测试它时,它不会连接到Web服务器,所以我什么都看不到。我应该在尝试连接服务器之前检查文件类型吗?谢谢你们提前。

while(1){ 
    file_offset += recv(client_fd,&client_buf[file_offset],4096,0); 
    if(strstr(client_buf,"\r\n\r\n")) 
     break; 
    } 


requested_file = parseRequest(client_buf); 

    if(stat(filename, &for_filename) < 0) 
    { 
     clienterror(client_fd, filename, "404", "Not found", "Webserver couldn't find this file"); 
     return; 
    } 

    get_filetype(filename, file_type, request_str); 
    send(client_fd,request_str,strlen(request_str),0); 

    // take requested_file, add a . to beginning, open that file 
    filename[0] = '.'; 
    strncpy(&filename[1],requested_file,4095); 
    read_fd = open(filename,0,0); 

回答

0

我应该attemtpting连接到 服务器前检查文件类型?

首先,除非您将其作为练习,否则您应该使用HTTP客户端库,而不是自己构建请求字符串。

其次,在HTTP中,您可以在单个请求中指定多个可接受的格式。浏览器使用默认值列表,您可以看到here。例如,当Firefox事先不知道应该请求的数据类型时,它使用字符串text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8。如果它知道它是一个视频,那么它使用不同的字符串audio/webm, audio/ogg, audio/wav, audio/*;q=0.9, application/ogg;q=0.7, video/*;q=0.6; */*;q=0.5。还有其他类型的请求字符串,如图像和脚本。

相关问题