Compare commits
	
		
			6 Commits
		
	
	
		
			f0b08d4f52
			...
			881185d03a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 881185d03a | |||
| c2e9ede9bc | |||
| 6c281313de | |||
| 3f9d492540 | |||
| 759fbff303 | |||
| 32c80d7bb6 | 
							
								
								
									
										14
									
								
								lib/http.hpp
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								lib/http.hpp
									
									
									
									
									
								
							| @ -28,13 +28,16 @@ class http_request { | ||||
|     //dolazni
 | ||||
|     http_request(const string _raw); | ||||
| 
 | ||||
|     void putheader(const string _key, const string _value); | ||||
|     void setheaders(const map<string, string> _headers); | ||||
|     //bool validate();
 | ||||
|     void header(const string _key, const string _value); | ||||
|     void header(const map<string, string> _headers); | ||||
|     private: | ||||
|     void parse(); | ||||
|     void mold(); | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| static string get_protocol(const string _protocol); | ||||
| 
 | ||||
| class http_response { | ||||
|     public: | ||||
| @ -46,14 +49,15 @@ class http_response { | ||||
| 
 | ||||
|     //konstruktor odgovora
 | ||||
|     // odlazni
 | ||||
|     http_response(const http_response_code _status, const string _body, const string _protocol = "1.1"); | ||||
|     http_response(const http_response_code _status, const string _body = "", const string _protocol = "1.1"); | ||||
|     // dolaznih
 | ||||
|     http_response(const string _raw); | ||||
| 
 | ||||
|     //bool validate();
 | ||||
|     // void putheader(const string _key, const string _value);
 | ||||
|     // void putheaders(const map<string, string> _headers);
 | ||||
|     void header(const string _key, const string _value); | ||||
|     void header(const map<string, string> _headers); | ||||
|      | ||||
|     private: | ||||
|     void mold();   // za slanje
 | ||||
|     void parse();  // čitaj http
 | ||||
| }; | ||||
|  | ||||
							
								
								
									
										52
									
								
								src/http.cpp
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								src/http.cpp
									
									
									
									
									
								
							| @ -3,16 +3,22 @@ | ||||
| http_request::http_request(const http_method _method, const string _url, const string _body, const string _protocol) { | ||||
|     method = http_method_to_str(_method); | ||||
|     url = _url; | ||||
|     body = _body; | ||||
|     protocol = set_protcol(_protocol); | ||||
|     protocol = get_protocol(_protocol); | ||||
|     if (!_body.empty()) { | ||||
|         body = _body; | ||||
|         this->header("Content-Length", to_string(body.length())); | ||||
|     } | ||||
|     mold(); | ||||
| } | ||||
| 
 | ||||
| http_request::http_request(const api *_api,  const string _protocol) { | ||||
|     method = _api->method; | ||||
|     url = _api->url; | ||||
|     body = _api->body; | ||||
|     protocol = set_protcol(_protocol); | ||||
|     protocol = get_protocol(_protocol); | ||||
|     if (!_api->body.empty()) { | ||||
|         body = _api->body; | ||||
|         this->header("Content-Length", to_string(body.length())); | ||||
|     } | ||||
|     mold(); | ||||
| } | ||||
| 
 | ||||
| @ -48,12 +54,12 @@ void http_request::parse() { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void http_request::putheader(const string _key, const string _value) { | ||||
| void http_request::header(const string _key, const string _value) { | ||||
|     headers[_key] = _value; | ||||
|     mold(); | ||||
| } | ||||
| 
 | ||||
| void http_request::setheaders(const map<string, string> _headers) { | ||||
| void http_request::header(const map<string, string> _headers) { | ||||
|     headers = _headers; | ||||
|     mold(); | ||||
| } | ||||
| @ -65,7 +71,7 @@ void http_request::setheaders(const map<string, string> _headers) { | ||||
| void http_request::mold() { | ||||
| 
 | ||||
|     raw = method.empty() ? "GET" : method; | ||||
|     raw += " " + url + " HTTP/1.1\r\n"; | ||||
|     raw += " " + url + " " + protocol + "\r\n"; | ||||
| 
 | ||||
|     if (!headers.empty()) { | ||||
|         for (auto i : headers) { | ||||
| @ -78,26 +84,46 @@ void http_request::mold() { | ||||
| 
 | ||||
| http_response::http_response(const http_response_code _status, const string _body, const string _protocol) { | ||||
|     status = to_string(_status) + " " + http_response_code_txt(_status); | ||||
|     body = _body; | ||||
|     protocol = set_protcol(_protocol); | ||||
|     if (!_body.empty()) { | ||||
|         body = _body; | ||||
|         this->header("Content-Length", to_string(body.length())); | ||||
|     } | ||||
|     protocol = get_protocol(_protocol); | ||||
|     mold();         | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static string get_protocol(const string _protocol) { | ||||
|     string protocol; | ||||
|     if (_protocol == "1.0" || _protocol == "1.1" || _protocol == "2.0") { | ||||
|         protocol = "HTTP/" + _protocol; | ||||
|     } | ||||
|     else {  | ||||
|         protocol = "HTTP/1.1"; | ||||
|     } | ||||
|     return protocol; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| http_response::http_response(const string _raw) { | ||||
|     raw = _raw; | ||||
|     parse(); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  *  | ||||
| */ | ||||
| void http_response::header(const string _key, const string _value) { | ||||
|     headers[_key] = _value; | ||||
|     mold(); | ||||
| } | ||||
| 
 | ||||
| void http_response::header(const map<string, string> _headers) { | ||||
|     headers = _headers; | ||||
|     mold(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void http_response::mold() { | ||||
|     raw = protocol + " " + status + "\r\n"; //"HTTP/1.1 200 OK\r\n"; // implementirati status
 | ||||
|     if (!headers.empty()) { | ||||
|         raw += '?'; | ||||
|         for (auto i : headers) { | ||||
|             raw += i.first + ": " + i.second + "\r\n";  | ||||
|         } | ||||
|  | ||||
| @ -8,26 +8,28 @@ int main() { | ||||
| 
 | ||||
|     try { | ||||
| 
 | ||||
|         api uf(GET, "delete", {make_pair("id", "4")}, "bay"); | ||||
|         api uf(GET, "/delete", {make_pair("id", "4")}, "bay"); | ||||
|         http_request myreq(&uf); | ||||
|         myreq.putheader("Content-type", "text/plain"); | ||||
|         myreq.header("Content-type", "text/plain"); | ||||
| 
 | ||||
|         cout << myreq.raw << endl; | ||||
| 
 | ||||
|         http_response myres("HTTP/1.1 200 OK\r\n\r\nnotauth"); | ||||
|         cout << myres.protocol << endl; | ||||
|         cout << myres.status << endl; | ||||
|         // cout << myres.headers << endl;
 | ||||
|         cout << myres.body << endl; | ||||
|         cout << myreq.protocol << endl; | ||||
|         // cout << myreq.status << endl;
 | ||||
|         for(auto i : myreq.headers)  | ||||
|             cout << i.first << " " << i.second << endl; | ||||
|         cout << myreq.body << endl; | ||||
| 
 | ||||
| 
 | ||||
|         http_response myres2(OK, "nnotauth", "1.0" ); | ||||
|         cout << myres2.protocol << endl; | ||||
|         cout << myres2.status << endl; | ||||
|         // cout << myres2.headers << endl;
 | ||||
|         cout << myres2.headers["Content-Length"] << endl; | ||||
|         cout << myres2.body << endl; | ||||
| 
 | ||||
| 
 | ||||
|     } catch (const string err) { | ||||
|         cout << err << endl; | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     // http myHttp(&myApi, "GET /fghfhf HTTP/1.1\r\nBaba");
 | ||||
| @ -49,19 +51,15 @@ int main() { | ||||
| 
 | ||||
|     // myres.get("HTTP/1.1 200 OK\r\n\r\nnotauth");
 | ||||
|     // myres.get("HTTP/1.1 200 OK");
 | ||||
| 
 | ||||
|     // myres.header("Content-type", "text/plain");
 | ||||
| 
 | ||||
|     // api uf(&myApi, myres);
 | ||||
| 
 | ||||
|     // cout << uf.method << " " << uf.path  << " " << uf.body << endl;
 | ||||
|     // cout << myres.method << " " << myres.url  << " " << myres.body << endl << myres.raw << endl;
 | ||||
|     // cout << uf.method << " " << uf.path  << " " << uf.body << endl;// << myres.raw;
 | ||||
|     // cout << myres.method << " " << myres.url  << " " << myres.body << endl;// << myres.raw;
 | ||||
| 
 | ||||
| 
 | ||||
|     // for(auto i : uf.params) 
 | ||||
|     //     cout << i.first << " " << i.second << endl;
 | ||||
| 
 | ||||
|     } catch (string err) { | ||||
|         cout << err << endl; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								test/test.o
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/test.o
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user