#include "stdafx.h" #include "https_request.h" https_request::https_request(const char* addr, acl::polarssl_conf* ssl_conf) : request_(addr) , to_charset_("utf-8") { if (ssl_conf) request_.set_ssl(ssl_conf); } https_request::~https_request(void) { } void* https_request::run(void) { acl::http_header& hdr = request_.request_header(); hdr.set_url("/").set_content_type("text/plain").set_keep_alive(true); hdr.add_param("name1", "name1"); if (request_.request(NULL, 0) == false) { printf("send request error\r\n"); return NULL; } const char* ptr = request_.header_value("Content-Type"); if (ptr == NULL || *ptr == 0) { printf("Content-Type empty!\r\n"); return NULL; } acl::http_ctype ctype; ctype.parse(ptr); // 响应头数据类型的子类型 const char* stype = ctype.get_stype(); bool ret; if (stype == NULL) ret = do_plain(request_); else if (strcasecmp(stype, "xml") == 0) ret = do_xml(request_); else if (strcasecmp(stype, "json") == 0) ret = do_json(request_); else ret = do_plain(request_); if (ret == true) printf("read ok!\r\n"); else { printf("read error\r\n"); return NULL; } return NULL; } bool https_request::do_plain(acl::http_request& req) { acl::string body; if (req.get_body(body, to_charset_) == false) { logger_error("get http body error"); return false; } printf("body:\r\n(%s)\r\n", body.c_str()); return true; } bool https_request::do_xml(acl::http_request& req) { acl::xml1 body; if (req.get_body(body, to_charset_) == false) { logger_error("get http body error"); return false; } printf(">>>xml: [%s]\r\n", body.to_string()); acl::xml_node* node = body.first_node(); while (node) { const char* tag = node->tag_name(); const char* name1 = node->attr_value("name1"); const char* name2 = node->attr_value("name2"); printf(">>tag: %s, name1: %s, name2: %s\r\n", tag ? tag : "null", name1 ? name1 : "null", name2 ? name2 : "null"); node = body.next_node(); } return true; } bool https_request::do_json(acl::http_request& req) { acl::json body; if (req.get_body(body, to_charset_) == false) { logger_error("get http body error"); return false; } acl::json_node* node = body.first_node(); while (node) { if (node->tag_name()) { printf("tag: %s", node->tag_name()); if (node->get_text()) printf(", value: %s\r\n", node->get_text()); else printf("\r\n"); } node = body.next_node(); } return true; }