读书人

老爸与web服务之小弟我对http请求的理

发布时间: 2013-03-04 17:22:12 作者: rapoo

老爸与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)两行进行交换,其功能是先从服务器上读取信息,然后再向服务器发请求(老爸先给我打钱,然后我再给老爸打电话要钱。)

读书人网 >Web前端

热点推荐