正在显示
4 个修改的文件
包含
64 行增加
和
22 行删除
@@ -54,25 +54,25 @@ if (temp_data.find(http_) == 0) { | @@ -54,25 +54,25 @@ if (temp_data.find(http_) == 0) { | ||
54 | int DmpHttp::DmpHttpBase::buildPostRequest(const std::string& server, const std::string& path, | 54 | int DmpHttp::DmpHttpBase::buildPostRequest(const std::string& server, const std::string& path, |
55 | std::ostream& out_request) { | 55 | std::ostream& out_request) { |
56 | // 分割path中的json数据 | 56 | // 分割path中的json数据 |
57 | - // std::string temp_path(path), temp_json; | ||
58 | - // int json_pos_begin = temp_path.find(HTTP_JSON_BEGIN) + 1; | ||
59 | - // int json_pos_end = temp_path.find(HTTP_JSON_END); | ||
60 | - // if (json_pos_begin != std::string::npos) { | ||
61 | - // // 计算json的长度 | ||
62 | - // int temp_json_lenth = std::string::npos; | ||
63 | - // if (json_pos_end != temp_json_lenth) { | ||
64 | - // temp_json_lenth = (json_pos_end - json_pos_begin); | ||
65 | - // } | ||
66 | - // temp_json = temp_path.substr(json_pos_begin, temp_json_lenth); | ||
67 | - // temp_path = temp_path.substr(0, (json_pos_begin - 1)); | ||
68 | - // } | ||
69 | - // out_request << "POST " << temp_path.c_str() << " HTTP/1.0\r\n"; | ||
70 | - // out_request << "Host: " << server.c_str() << "\r\n"; | ||
71 | - // out_request << "Content-Length: " << temp_json.length() << "\r\n"; | ||
72 | - // out_request << "Content-Type: application/x-www-form-urlencoded\r\n"; | ||
73 | - // out_request << "Accept: */*\r\n"; | ||
74 | - // out_request << "Connection: close\r\n\r\n"; | ||
75 | - // out_request << temp_json.c_str(); | 57 | + std::string temp_path(path), temp_json; |
58 | + int json_pos_begin = temp_path.find(HTTP_JSON_BEGIN) + 1; | ||
59 | + int json_pos_end = temp_path.find(HTTP_JSON_END); | ||
60 | + if (json_pos_begin != std::string::npos) { | ||
61 | + // 计算json的长度 | ||
62 | + int temp_json_lenth = std::string::npos; | ||
63 | + if (json_pos_end != temp_json_lenth) { | ||
64 | + temp_json_lenth = (json_pos_end - json_pos_begin); | ||
65 | + } | ||
66 | + temp_json = temp_path.substr(json_pos_begin, temp_json_lenth); | ||
67 | + temp_path = temp_path.substr(0, (json_pos_begin - 1)); | ||
68 | + } | ||
69 | + out_request << "POST " << temp_path.c_str() << " HTTP/1.0\r\n"; | ||
70 | + out_request << "Host: " << server.c_str() << "\r\n"; | ||
71 | + out_request << "Content-Length: " << temp_json.length() << "\r\n"; | ||
72 | + out_request << "Content-Type: application/x-www-form-urlencoded\r\n"; | ||
73 | + out_request << "Accept: */*\r\n"; | ||
74 | + out_request << "Connection: close\r\n\r\n"; | ||
75 | + out_request << temp_json.c_str(); | ||
76 | return HTTP_SUCCESS; | 76 | return HTTP_SUCCESS; |
77 | } | 77 | } |
78 | 78 |
@@ -11,8 +11,8 @@ | @@ -11,8 +11,8 @@ | ||
11 | #include <iostream> | 11 | #include <iostream> |
12 | #include <boost/asio.hpp> | 12 | #include <boost/asio.hpp> |
13 | namespace DmpHttp | 13 | namespace DmpHttp |
14 | -{ | ||
15 | - #define HTTP_SUCCESS (0) // 操作成功 | 14 | +{ |
15 | + #define HTTP_SUCCESS (0) // 操作成功 | ||
16 | #define HTTP_ERROR_UNKNOWN (-1) // 未知的错误 | 16 | #define HTTP_ERROR_UNKNOWN (-1) // 未知的错误 |
17 | #define HTTP_ERROR_NETWORK (-2) // 网络连接失败 | 17 | #define HTTP_ERROR_NETWORK (-2) // 网络连接失败 |
18 | #define HTTP_ERROR_HTTP_HEAD (-3) // 未找到协议头 http || https | 18 | #define HTTP_ERROR_HTTP_HEAD (-3) // 未找到协议头 http || https |
@@ -35,6 +35,7 @@ namespace DmpHttp | @@ -35,6 +35,7 @@ namespace DmpHttp | ||
35 | virtual ~DmpHttpBase(); | 35 | virtual ~DmpHttpBase(); |
36 | // Post请求 | 36 | // Post请求 |
37 | virtual int post(const std::string& url) = 0; | 37 | virtual int post(const std::string& url) = 0; |
38 | + virtual int post(const std::string& url, std::string& postData)= 0; | ||
38 | // get请求 | 39 | // get请求 |
39 | virtual int get(const std::string& url) = 0; | 40 | virtual int get(const std::string& url) = 0; |
40 | virtual std::string getResponse(void) = 0; | 41 | virtual std::string getResponse(void) = 0; |
@@ -18,6 +18,11 @@ int DmpHttp::DmpHttpUtils::post(const std::string& url) | @@ -18,6 +18,11 @@ int DmpHttp::DmpHttpUtils::post(const std::string& url) | ||
18 | handleRequestResolve(url, DmpHttpBase::buildPostRequest); | 18 | handleRequestResolve(url, DmpHttpBase::buildPostRequest); |
19 | return HTTP_SUCCESS; | 19 | return HTTP_SUCCESS; |
20 | } | 20 | } |
21 | +int DmpHttp::DmpHttpUtils::post(const std::string& url, std::string& postData) | ||
22 | +{ | ||
23 | + handleRequestResolve(url,postData, DmpHttpBase::buildPostRequest); | ||
24 | + return HTTP_SUCCESS; | ||
25 | +} | ||
21 | int DmpHttp::DmpHttpUtils::get(const std::string& url) | 26 | int DmpHttp::DmpHttpUtils::get(const std::string& url) |
22 | { | 27 | { |
23 | handleRequestResolve(url, DmpHttpBase::buildGetRequest); | 28 | handleRequestResolve(url, DmpHttpBase::buildGetRequest); |
@@ -47,6 +52,32 @@ void DmpHttp::DmpHttpUtils::handleRequestResolve(const std::string& url, pBuildR | @@ -47,6 +52,32 @@ void DmpHttp::DmpHttpUtils::handleRequestResolve(const std::string& url, pBuildR | ||
47 | } | 52 | } |
48 | return; | 53 | return; |
49 | } | 54 | } |
55 | +void DmpHttp::DmpHttpUtils::handleRequestResolve(const std::string& url, std::string& postData, pBuildRequest func) | ||
56 | +{ | ||
57 | + try { | ||
58 | + responseData_.clear(); | ||
59 | + // 解析URL | ||
60 | + std::string server, port,path; | ||
61 | + parseUrl(url, server, port, path); | ||
62 | + path=postData; | ||
63 | + | ||
64 | + std::ostream request_stream(&request_); | ||
65 | + // 合成请求 | ||
66 | + func(server, path, request_stream); | ||
67 | + | ||
68 | + // 解析服务地址\端口 | ||
69 | + boost::asio::ip::tcp::resolver::query query(server, port); | ||
70 | + resolver_.async_resolve(query, | ||
71 | + boost::bind(&DmpHttpUtils::handleResolve, this, | ||
72 | + boost::asio::placeholders::error, | ||
73 | + boost::asio::placeholders::iterator)); | ||
74 | + } | ||
75 | + catch (std::exception& e) { | ||
76 | + socket_.close(); | ||
77 | + std::cout << "Exception: " << e.what() << "\n"; | ||
78 | + } | ||
79 | + return; | ||
80 | +} | ||
50 | void DmpHttp::DmpHttpUtils::handleResolve(const boost::system::error_code& err, | 81 | void DmpHttp::DmpHttpUtils::handleResolve(const boost::system::error_code& err, |
51 | boost::asio::ip::tcp::resolver::iterator endpoint_iterator) { | 82 | boost::asio::ip::tcp::resolver::iterator endpoint_iterator) { |
52 | if (err) { | 83 | if (err) { |
@@ -173,7 +204,14 @@ std::string DmpHttp::post(const std::string &url) { | @@ -173,7 +204,14 @@ std::string DmpHttp::post(const std::string &url) { | ||
173 | io.run(); | 204 | io.run(); |
174 | return c.getResponse(); | 205 | return c.getResponse(); |
175 | } | 206 | } |
176 | - | 207 | +std::string DmpHttp::post(const std::string& url, std::string& postData) |
208 | +{ | ||
209 | + boost::asio::io_service io; | ||
210 | + DmpHttp::DmpHttpUtils c(io); | ||
211 | + c.post(url,postData); | ||
212 | + io.run(); | ||
213 | + return c.getResponse(); | ||
214 | +} | ||
177 | std::string DmpHttp::get(const std::string &url) { | 215 | std::string DmpHttp::get(const std::string &url) { |
178 | boost::asio::io_service io; | 216 | boost::asio::io_service io; |
179 | DmpHttp::DmpHttpUtils c(io); | 217 | DmpHttp::DmpHttpUtils c(io); |
@@ -20,12 +20,14 @@ namespace DmpHttp | @@ -20,12 +20,14 @@ namespace DmpHttp | ||
20 | DmpHttpUtils(boost::asio::io_service& io_service); | 20 | DmpHttpUtils(boost::asio::io_service& io_service); |
21 | virtual ~DmpHttpUtils(); | 21 | virtual ~DmpHttpUtils(); |
22 | virtual int post(const std::string& url); | 22 | virtual int post(const std::string& url); |
23 | + virtual int post(const std::string& url, std::string& postData); | ||
23 | virtual int get(const std::string& url); | 24 | virtual int get(const std::string& url); |
24 | 25 | ||
25 | virtual std::string getResponse(void) {return responseData_;} | 26 | virtual std::string getResponse(void) {return responseData_;} |
26 | private: | 27 | private: |
27 | // 建立请求 | 28 | // 建立请求 |
28 | void handleRequestResolve(const std::string& url, pBuildRequest func); | 29 | void handleRequestResolve(const std::string& url, pBuildRequest func); |
30 | + void handleRequestResolve(const std::string& url, std::string& path, pBuildRequest func); | ||
29 | // 解析后 | 31 | // 解析后 |
30 | void handleResolve(const boost::system::error_code& err, | 32 | void handleResolve(const boost::system::error_code& err, |
31 | boost::asio::ip::tcp::resolver::iterator endpoint_iterator); | 33 | boost::asio::ip::tcp::resolver::iterator endpoint_iterator); |
@@ -52,6 +54,7 @@ namespace DmpHttp | @@ -52,6 +54,7 @@ namespace DmpHttp | ||
52 | std::string responseData_; | 54 | std::string responseData_; |
53 | }; | 55 | }; |
54 | std::string post(const std::string &url); | 56 | std::string post(const std::string &url); |
57 | + std::string post(const std::string& url, std::string& postData); | ||
55 | std::string get(const std::string &url); | 58 | std::string get(const std::string &url); |
56 | } | 59 | } |
57 | 60 |
请
注册
或
登录
后发表评论