#
include
<stdio.h>
#
include
<string.h>
#
include
<ctype.h>
#
include
<stdlib.h>
#
include
<signal.h>
#
include
<unistd.h>
#
include
<evhttp.h>
#
include
<event2/event.h>
#
include
<event2/http.h>
#
include
<event2/bufferevent.h>
typedef struct my_struct_s my_struct_t;
struct my_struct_s {
struct evhttp_connection *conn;
struct evhttp_request *req;
struct evhttp_uri *uri;
struct event *cleanup;
};
struct event_base *Base_Primary;
char *trimwhitespace(char *str)
{
char *
end
;
while
(isspace(*str)) str++;
if
(*str == 0)
return
str;
end
= str +
strlen
(str) - 1;
while
(
end
> str && isspace(*
end
))
end
--;
*(
end
+1) = 0;
return
str;
}
void connection_free(int sock, short which, void *arg) {
my_struct_t *myStruct = arg;
event_free(myStruct->cleanup);
evhttp_connection_free(myStruct->conn);
evhttp_request_free(myStruct->req);
evhttp_uri_free(myStruct->uri);
free(myStruct);
}
void http_request_done(struct evhttp_request *req, void *arg){
my_struct_t *myStruct = arg;
struct timeval Timeout;
Timeout.tv_sec = 0;
Timeout.tv_usec = 0;
myStruct->cleanup = evtimer_new(Base_Primary, connection_free, (void *)myStruct);
evtimer_add(myStruct->cleanup, &Timeout);
}
int http_req(char *uri) {
my_struct_t *myStruct = malloc(sizeof(my_struct_t));
myStruct->uri = evhttp_uri_parse(uri);
myStruct->conn = evhttp_connection_base_new(Base_Primary, NULL, uri, 80);
myStruct->req = evhttp_request_new(http_request_done, myStruct);
evhttp_add_header(evhttp_request_get_output_headers(myStruct->req),
"Host"
,
"localhost"
);
evhttp_add_header(evhttp_request_get_output_headers(myStruct->req),
"Connection"
,
"close"
);
evhttp_make_request(myStruct->conn, myStruct->req, EVHTTP_REQ_GET, uri);
evhttp_connection_set_timeout(myStruct->req->evcon, 2);
return
1;
}
int main(int argc, char *argv[]) {
Base_Primary = event_base_new();
char filename[] =
"/tmp/50000.txt"
;
FILE *fp;
char StrLine[1024];
char *host;
if
((fp =
fopen
(filename,
"r"
)) == NULL)
{
printf(
"error!"
);
return
-1;
}
while
(!
feof
(fp))
{
fgets
(StrLine,1024,fp);
host = StrLine;
host = trimwhitespace(host);
http_req(host);
}
fclose(fp);
event_base_dispatch(Base_Primary);
event_base_free(Base_Primary);
return
1;
}