Comments, README
This commit is contained in:
		
							parent
							
								
									dc26ed563f
								
							
						
					
					
						commit
						beaddd239b
					
				
							
								
								
									
										60
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								README.md
									
									
									
									
									
								
							@ -1,3 +1,59 @@
 | 
			
		||||
# cppurl
 | 
			
		||||
 | 
			
		||||
C++ libcurl framework
 | 
			
		||||
# Rest client library, using libcurl
 | 
			
		||||
 | 
			
		||||
A small framework for simple client-side REST API requests for C++. It uses libcurl. It got its name from a play on the words curl and cpp.
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
 | 
			
		||||
- Object oriented
 | 
			
		||||
- Adjustable headers
 | 
			
		||||
- Configurable user agent
 | 
			
		||||
- Adjustable timeout
 | 
			
		||||
- Native C++ containers: map, string
 | 
			
		||||
- QA object
 | 
			
		||||
- Curl and HTTP code status
 | 
			
		||||
- It is possible to turn off certificate validation
 | 
			
		||||
- A configurable version of the HTTP protocol
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
Just download the latest release and unzip it into your project. You can turn it on with:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
#include "cppurl/lib/cppurl.hpp"
 | 
			
		||||
using namespace marcelb;
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```c++
 | 
			
		||||
// init, and sets
 | 
			
		||||
Curl rest;
 | 
			
		||||
string header_value = "3849f438uf9uedu8ejweoijwejd09230";
 | 
			
		||||
rest.header("API", header_value).timeout(700)
 | 
			
		||||
    .httpv(HTTP2).sslverifyoff();
 | 
			
		||||
// execute and print
 | 
			
		||||
cout << rest.get("https://reqres.in/api/users/2") << endl << 
 | 
			
		||||
    "Curl status " << rest.curlStatus << endl << 
 | 
			
		||||
    "HTTP status " << rest.httpStatus << endl;
 | 
			
		||||
 | 
			
		||||
for (auto header : rest.responseHeader) {
 | 
			
		||||
    cout << header.first << " " << header.second << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
[APACHE 2.0](http://www.apache.org/licenses/LICENSE-2.0/)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Support & Feedback
 | 
			
		||||
 | 
			
		||||
For support and any feedback, contact the address: marcelb96@yahoo.com.
 | 
			
		||||
 | 
			
		||||
## Contributing
 | 
			
		||||
 | 
			
		||||
Contributions are always welcome!
 | 
			
		||||
 | 
			
		||||
Feel free to fork and start working with or without a later pull request. Or contact for suggest and request an option.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -11,12 +11,27 @@ namespace marcelb {
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Callback function for parsing the HTTP body
 | 
			
		||||
*/
 | 
			
		||||
static size_t bodyCallback(void *contents, size_t size, size_t nmemb, void *body_ptr); 
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Callback function for parsing HTTP headers
 | 
			
		||||
*/
 | 
			
		||||
static size_t headerCallback(char* buffer, size_t size, size_t nitems, void* header_ptr); 
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * HTTP supported protocols
 | 
			
		||||
*/
 | 
			
		||||
enum http_version { DEFAULT, HTTP1_0, HTTP1_1, HTTP2, HTTP2TLS, HTTP2PK, HTTP3 = 30};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Class for curl request and response
 | 
			
		||||
*/
 | 
			
		||||
class Curl {
 | 
			
		||||
    // input
 | 
			
		||||
 | 
			
		||||
    CURL *curl;
 | 
			
		||||
    CURLcode res;
 | 
			
		||||
    struct curl_slist *headers = NULL;
 | 
			
		||||
@ -28,60 +43,62 @@ class Curl {
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
    // output
 | 
			
		||||
 | 
			
		||||
    // Curl code response status
 | 
			
		||||
    CURLcode curlStatus;
 | 
			
		||||
    // HTTP code response status
 | 
			
		||||
    long httpStatus;
 | 
			
		||||
    // HTTP response headers
 | 
			
		||||
    map<string, string> responseHeader;
 | 
			
		||||
    // HTTP body
 | 
			
		||||
    string body;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Postavi zaglavlje s ključem i vrijednošću
 | 
			
		||||
     * Novi pozivi ne brišu stara zaglavlja, ponovljena se prepišu
 | 
			
		||||
     * Set header with key and value
 | 
			
		||||
     * New calls do not delete old headers, repeated ones are overwritten
 | 
			
		||||
    */
 | 
			
		||||
    Curl& header(const string& key, const string& value);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Postavi zaglavlja iz mape
 | 
			
		||||
     * Ponovan poziv prepisat će ona zaglavlja koja postoje
 | 
			
		||||
     * Set headers from folder
 | 
			
		||||
     * The redial will overwrite those headers that exist
 | 
			
		||||
    */
 | 
			
		||||
    Curl& header(const map<string, string> &_headers);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Postavi u zaglavlje User-Agent
 | 
			
		||||
     * Set in User-Agent header
 | 
			
		||||
    */
 | 
			
		||||
    Curl& useragent(const string& useragent_);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Postavi vrijeme isteka zahtjeva
 | 
			
		||||
     * Set request timeout
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    Curl& timeout(const long _timeout);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Omogući/onemogući validaciju certifikata kod SSL veza
 | 
			
		||||
     * Disable certificate validation for SSL connections
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    Curl& sslverifyoff();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Postavi verziju HTTP protokola
 | 
			
		||||
     * HTTP1_0 - HTTP1_1 - HTTP2 - HTTP2TLS - HTTP2PK - HTTP3 
 | 
			
		||||
     * Set HTTP protocol version
 | 
			
		||||
     * HTTP1_0 - HTTP1_1 - HTTP2 - HTTP2TLS - HTTP2PK - HTTP3
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    Curl& httpv(const http_version protocol_v);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Izvršiv HTTP GET zahtjev
 | 
			
		||||
     * Vraća string HTTP tjela
 | 
			
		||||
     * Executable HTTP GET request
 | 
			
		||||
     * Returns the HTTP body as string
 | 
			
		||||
    */
 | 
			
		||||
    string get(const string& req);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Obriši spremljeno zaglavlje
 | 
			
		||||
     * Clear saved headers
 | 
			
		||||
    */
 | 
			
		||||
    Curl& clearheader();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Obrši trenutnog User-Agent -a
 | 
			
		||||
     * Clear the current User-Agent
 | 
			
		||||
    */
 | 
			
		||||
    Curl& clearuseragent();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -12,11 +12,12 @@ using namespace marcelb;
 | 
			
		||||
int main () {
 | 
			
		||||
 | 
			
		||||
    Curl rest;
 | 
			
		||||
    string header_value = "jebiga";
 | 
			
		||||
    rest.header("API", header_value);
 | 
			
		||||
    string header_value = "3849f438uf9uedu8ejweoijwejd09230";
 | 
			
		||||
    rest.header("API", header_value).timeout(700)
 | 
			
		||||
        .httpv(HTTP2).sslverifyoff();
 | 
			
		||||
    cout << rest.get("https://reqres.in/api/users/2") << endl << 
 | 
			
		||||
        "Curl status " << rest.curlStatus << endl << 
 | 
			
		||||
        " http status " << rest.httpStatus << endl;
 | 
			
		||||
        "HTTP status " << rest.httpStatus << endl;
 | 
			
		||||
 | 
			
		||||
    for (auto header : rest.responseHeader) {
 | 
			
		||||
        cout << header.first << " " << header.second << endl;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user