Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12545
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-31 14:05
文章分类
文章存档

2015年(2)

我的朋友
最近访客

分类: LINUX

2015-08-31 14:32:16

在实现httpget的方法在线获取服务器上的文件内容,需要注意的是在获取过程中的主要核心流程,具体代码如下

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <sys/stat.h>
  6. #include <fcntl.h>
  7. #include <string.h>
  8. #include <arpa/inet.h>
  9. #include <netdb.h>
  10. #include <netinet/in.h>
  11. #include <stdlib.h>
  12. #include <errno.h>
  13. #include <stdlib.h>
  14. #define BUFSIZE (8<<10)
  15. #define h_addr h_addr_list[0]

  16. void DownLoad(char *url){
  17.     int socketfd;
  18.     struct sockaddr_in addr;
  19.     struct hostent *pURL;
  20.     int i=0;
  21.     char myurl[BUFSIZ];
  22.     char *pHost =0,*pGet =0;
  23.     char host[BUFSIZ],GET[BUFSIZ];
  24.     char Header[BUFSIZ];
  25.     FILE * pf;
  26.   
  27.     char text[BUFSIZE];
  28.     memset(myurl,0,BUFSIZE);
  29.     memset(host,0,BUFSIZE);
  30.     strcpy(myurl,url);
  31.   
  32.     for (i=0,pHost= myurl;*pHost!='/'&&*pHost!='\0';pHost++,i++)
  33.     {
  34.         host[i] = *pHost;
  35.     }
  36.     host[i]='\0';
  37.     strcpy(GET,pHost);
  38.     memset(Header,'\0',BUFSIZ);
  39.   
  40.     socketfd = socket(AF_INET,SOCK_STREAM,0);
  41.     pURL = gethostbyname(host);

  42.     bzero(&addr,sizeof(struct sockaddr_in));
  43.     addr.sin_family = AF_INET;
  44.     addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr);
  45.     addr.sin_port = htons(80);


  46.     strcat(Header,"GET ");
  47.     strcat(Header,GET);
  48.     strcat(Header," HTTP/1.0\r\n");
  49.     strcat(Header, "Accept: */*\r\n"); //image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint,
  50.     strcat(Header, "Accept-Language: cn\r\n");
  51.     strcat(Header, "User-Agent: Mozilla/4.0\r\n");
  52.     strcat(Header,"Host: ");
  53.     strcat(Header,host);
  54.     strcat(Header,"\r\nConnection: Keep-Alive\r\n");
  55.     strcat(Header, "\r\n\r\n");

  56.     int status;
  57.     if((status = connect(socketfd,(struct sockaddr *)&addr,sizeof(addr)))<0)
  58.     {
  59.         perror("connect failed!\n");
  60.         exit(-1);
  61.     }            

  62.     int sentbytes;
  63.     if((sentbytes = send(socketfd,Header,strlen(Header),0)) <0 )
  64.     {
  65.         perror("send failed!\n");
  66.         exit(-1);
  67.     }
  68.     
  69.     printf("%s\n",Header);
  70.     pf = fopen("/home/ganchuhui/myget/1.txt","w");
  71.     
  72.     if(recv(socketfd,text,BUFSIZE,0)<0){
  73.         perror("recv failed!\n");
  74.         exit(-1);
  75.     }
  76.     printf("the text is: %s\n", text);

  77.     fclose(pf);
  78.     close(socketfd);
  79.   
  80.       
  81. }
  82. int main(){
  83.     char a[256];
  84.     printf(" style="color:#0000CC;">);
  85.     scanf("%s",a);
  86.     DownLoad(a);
  87. }

阅读(1284) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Linux 调用动态库(.SO文件)方法总结

给主人留下些什么吧!~~