我写了一个函数来检查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);