#include #include #include #include #include #include #ifndef _WIN32 #include #endif #include #include using namespace std; #define WEBROOT "." #define DEFAULTINDEX "index.html" void http_cb(struct evhttp_request *request, void *arg) { cout << "http_cb" << endl; //1 获取浏览器的请求信息 //uri const char *uri = evhttp_request_get_uri(request); cout << "uri:" << uri << endl; //请求类型 GET POST string cmdtype; switch (evhttp_request_get_command(request)) { case EVHTTP_REQ_GET: cmdtype = "GET"; break; case EVHTTP_REQ_POST: cmdtype = "POST"; break; } cout << "cmdtype:" << cmdtype << endl; // 消息报头 evkeyvalq *headers = evhttp_request_get_input_headers(request); cout << "====== headers ======" << endl; for (evkeyval *p = headers->tqh_first; p != NULL; p = p->next.tqe_next) { cout << p->key << ":" << p->value << endl; } // 请求正文 (GET为空,POST有表单信息 ) evbuffer *inbuf = evhttp_request_get_input_buffer(request); char buf[1024] = { 0 }; cout << "======= Input data ======" << endl; while (evbuffer_get_length(inbuf)) { int n = evbuffer_remove(inbuf, buf, sizeof(buf) - 1); if (n > 0) { buf[n] = '\0'; cout << buf << endl; } } //2 回复浏览器 //状态行 消息报头 响应正文 HTTP_NOTFOUND HTTP_INTERNAL string filepath = WEBROOT; filepath += uri; if (strcmp(uri, "/") == 0) { //默认加入首页文件 filepath += DEFAULTINDEX; } //消息报头 evkeyvalq *outhead = evhttp_request_get_output_headers(request); // 要支持 图片 js css 下载zip文件 // 获取文件的后缀 // ./index.html int pos = filepath.rfind('.'); string postfix = filepath.substr(pos + 1, filepath.size() - (pos + 1)); if (postfix == "jpg" || postfix == "gif" || postfix == "png") { string tmp = "image/" + postfix; evhttp_add_header(outhead, "Content-Type", tmp.c_str()); } else if (postfix == "zip") { evhttp_add_header(outhead, "Content-Type", "application/zip"); } else if (postfix == "html") { evhttp_add_header(outhead, "Content-Type", "text/html;charset=UTF8"); //evhttp_add_header(outhead, "Content-Type", "text/html"); } else if (postfix == "css") { evhttp_add_header(outhead, "Content-Type", "text/css"); } //读取html文件返回正文 if(filepath.find_first_of("?") != std::string::npos){ std::cout<<"filepath.find_first_of "<