最近的工作需求client和server使用https协议进行通讯,我负责client编写程序,在操作系统的-depth理解认为一旦前webserver实现,整理代码:
#include"apue.h" extern char **environ; void clienterror(int fd,char *cause,char *errnum,char *shortmsg,char *longmsg) { char buf[MAXLINE],body[MAXLINE]; sprintf(body,"<html><title>Tiny Error</title>"); sprintf(body,"%s<body bgcolor=""ffffff""> ",body); sprintf(body,"%s%s:%s ",body,errnum,shortmsg); sprintf(body,"%s<p>%s:%s ",body,longmsg,cause); sprintf(body,"%s<hr><em>The tiny Web server</em? ",body); sprintf(buf,"HTTP/1.0 %s %s ",errnum,shortmsg); rio_writen(fd,buf,strlen(buf)); sprintf(buf,"Content-type:text/html "); rio_writen(fd,buf,strlen(buf)); sprintf(buf,"Content-length:%d ",(int)strlen(body)); rio_writen(fd,buf,strlen(buf)); rio_writen(fd,body,strlen(body)); } void read_requesthdrs(rio_t *rp) { char buf[MAXLINE]; rio_readlineb(rp,buf,MAXLINE); while(strcmp(buf," ")) { rio_readlineb(rp,buf,MAXLINE); printf("%s",buf); } return; } int parse_uri(char *uri,char *filename,char *cgiargs) { char *ptr; printf("parse_uri(uri):%s ",uri); if(!strstr(uri,"cgi-bin")) { strcpy(cgiargs,""); strcpy(filename,"."); strcat(filename,uri); if(uri[strlen(uri)-1]=='/') strcat(filename,"home.html"); return 1; } else { ptr=index(uri,'?'); if(ptr) { strcpy(cgiargs,ptr+1); *ptr='