在实现httpget的方法在线获取服务器上的文件内容,需要注意的是在获取过程中的主要核心流程,具体代码如下
-
#include <stdio.h>
-
#include <unistd.h>
-
#include <sys/types.h>
-
#include <sys/socket.h>
-
#include <sys/stat.h>
-
#include <fcntl.h>
-
#include <string.h>
-
#include <arpa/inet.h>
-
#include <netdb.h>
-
#include <netinet/in.h>
-
#include <stdlib.h>
-
#include <errno.h>
-
#include <stdlib.h>
-
#define BUFSIZE (8<<10)
-
#define h_addr h_addr_list[0]
-
-
void DownLoad(char *url){
-
int socketfd;
-
struct sockaddr_in addr;
-
struct hostent *pURL;
-
int i=0;
-
char myurl[BUFSIZ];
-
char *pHost =0,*pGet =0;
-
char host[BUFSIZ],GET[BUFSIZ];
-
char Header[BUFSIZ];
-
FILE * pf;
-
-
char text[BUFSIZE];
-
memset(myurl,0,BUFSIZE);
-
memset(host,0,BUFSIZE);
-
strcpy(myurl,url);
-
-
for (i=0,pHost= myurl;*pHost!='/'&&*pHost!='\0';pHost++,i++)
-
{
-
host[i] = *pHost;
-
}
-
host[i]='\0';
-
strcpy(GET,pHost);
-
memset(Header,'\0',BUFSIZ);
-
-
socketfd = socket(AF_INET,SOCK_STREAM,0);
-
pURL = gethostbyname(host);
-
-
bzero(&addr,sizeof(struct sockaddr_in));
-
addr.sin_family = AF_INET;
-
addr.sin_addr.s_addr = *((unsigned long*)pURL->h_addr);
-
addr.sin_port = htons(80);
-
-
-
strcat(Header,"GET ");
-
strcat(Header,GET);
-
strcat(Header," HTTP/1.0\r\n");
-
strcat(Header, "Accept: */*\r\n"); //image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint,
-
strcat(Header, "Accept-Language: cn\r\n");
-
strcat(Header, "User-Agent: Mozilla/4.0\r\n");
-
strcat(Header,"Host: ");
-
strcat(Header,host);
-
strcat(Header,"\r\nConnection: Keep-Alive\r\n");
-
strcat(Header, "\r\n\r\n");
-
-
int status;
-
if((status = connect(socketfd,(struct sockaddr *)&addr,sizeof(addr)))<0)
-
{
-
perror("connect failed!\n");
-
exit(-1);
-
}
-
-
int sentbytes;
-
if((sentbytes = send(socketfd,Header,strlen(Header),0)) <0 )
-
{
-
perror("send failed!\n");
-
exit(-1);
-
}
-
-
printf("%s\n",Header);
-
pf = fopen("/home/ganchuhui/myget/1.txt","w");
-
-
if(recv(socketfd,text,BUFSIZE,0)<0){
-
perror("recv failed!\n");
-
exit(-1);
-
}
-
printf("the text is: %s\n", text);
-
-
fclose(pf);
-
close(socketfd);
-
-
-
}
-
int main(){
-
char a[256];
-
printf(" style="color:#0000CC;">);
-
scanf("%s",a);
-
DownLoad(a);
-
}
阅读(1334) | 评论(0) | 转发(0) |