#include <stdio.h>
#include "http_lib.h"
#define MAX_URL 10
int main(int argc, char *argv[])
{
FILE *fp;
int i,ri,n_url,read_size,r_head;
int s,pid,status;
unsigned short port=0;
char url[MAX_URL][URL_LEN];
char outfile[URL_LEN];
char host[URL_LEN];
char path[URL_LEN];
char buf[BUFSIZ];
if(argc != 2) {
printf("usage: %s URL-listfile\n",argv[0]); return 0;
}
if((fp=fopen(argv[1],"r")) == NULL){
perror(argv[1]); return 0;
}
i=0;
while(fgets(url[i],URL_LEN,fp)){
read_size = strlen(url[i]);
if(url[i][read_size-1] == '\n')
url[i][read_size-1] = '\0';
i++;
}
n_url = (i>MAX_URL)?MAX_URL:i;
fclose(fp);
for(i=0;i<n_url;i++){
if((pid = fork()) < 0){ perror("fork"); continue; }
if(pid == 0){
if(!split_url(url[i],host,path,&port)){
fprintf(stderr,"[%d]:%s を取得します.\n\n",i,url[i]);
if((s = http_open(host,port)) < 0) exit(0);
http_request(s,host,path,port);
r_head = 1;
sprintf(outfile,"%d.html",i);
if((fp=fopen(outfile,"w+")) == NULL) exit(0);
while(1){
read_size = read(s,buf,BUFSIZ);
if(read_size > 0){
for(ri=0;ri<read_size;ri++){
if(r_head == 1){
if(!strncmp(buf+ri,"\r\n\r\n",4)){
ri+=4; r_head = 0;
}
} else {
if(buf[ri] != '\r') fputc(buf[ri],fp);
}
}
} else break;
}
fclose(fp);
fprintf(stderr,"[%d]:完了.\n",i);
close(s);
}
exit(0);
}
}
for(i=0;i<n_url;i++){
if(wait(&status) < 0){
perror("wait"); exit(1);
}
}
return 0;
}