老爸与web服务之我对http请求的理解
前面写了一篇博客是用java实现http请求。在这之前也曾经用c写过http的请求。
http协议是建立在tcp协议基础之上的协议。OK,用C的socket连接到apache服务,本机apache占80端口已启动
#include<sys/types.h>#include<string.h>#include<sys/socket.h>#include<stdio.h>#include<stdlib.h>#include<netinet/in.h>#include<unistd.h>int main(){ int sockfd; struct sockaddr_in addr; int PORT = 80;//apache工作中80端口 char IP[]="127.0.0.1";//本机IP地址 if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){ perror("socket..\n"); exit(1); } bzero(&addr,sizeof(addr)); //设置服务器的IP地址和端口号。 addr.sin_family=AF_INET; addr.sin_port=htons(PORT); addr.sin_addr.s_addr=inet_addr(IP); if(connect(sockfd,(struct sockaddr*)&addr,sizeof(addr))<0){ perror("connect..\n"); } char str1[1024]; int buf=0; memset(str1,'\0',sizeof(str1)); strcat(str1,"GET /myweb/style.html HTTP/1.1\r\n"); strcat(str1,"HOST:127.0.0.1\r\n"); strcat(str1,"\r\n"); int n=strlen(str1); write(sockfd,str1,n); //^_^ buf=read(sockfd,str1,1020); str1[buf]='\0'; printf("%s",str1); close(sockfd); return 0;}中间增加的代码就是http的请求头部信息,其作用相当于电话打通后“老爸给我打钱"。如果第二个程序中将write(sockfd,str1,n)与buf=read(sockfd,str1,1020)两行进行交换,其功能是先从服务器上读取信息,然后再向服务器发请求(老爸先给我打钱,然后我再给老爸打电话要钱。)