53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "ground_lib.h"
 | |
| 
 | |
| #include <cpr/cpr.h>
 | |
| #include <cpr/interface.h>
 | |
| #include <fstream>
 | |
| 
 | |
| void error(std::string status) {
 | |
|     std::cout << "Request error: " << status << std::endl;
 | |
| }
 | |
| 
 | |
| GroundValue simpleRequest(GroundValue* args, int arg_count) {
 | |
|     VALIDATE_ARGS_1(GROUND_STRING);
 | |
| 
 | |
|     cpr::Response r = cpr::Get(cpr::Url(GET_STRING(args[0])));
 | |
| 
 | |
|     if (!(r.status_code >= 200 && r.status_code < 300)) {
 | |
|         error("Non zero HTTP code " + std::to_string(r.status_code));
 | |
|         return ground_string_val("Error code " + std::to_string(r.status_code));    
 | |
|     }
 | |
|     
 | |
|     return ground_string_val(r.text);
 | |
| }
 | |
| 
 | |
| GroundValue saveContents(GroundValue* args, int arg_count) {
 | |
|     VALIDATE_ARGS_2(GROUND_STRING, GROUND_STRING);
 | |
| 
 | |
|     std::ofstream file(GET_STRING(args[1]), std::ios::binary);
 | |
| 
 | |
|     if (file.good()) {
 | |
|         cpr::Response r = cpr::Download(file, cpr::Url{GET_STRING(args[0])});
 | |
| 
 | |
|         if (!(r.status_code >= 200 && r.status_code < 300)) {
 | |
|             error("Non zero HTTP code " + std::to_string(r.status_code));
 | |
|             return GROUND_BOOL_VAL(false);
 | |
|         }
 | |
|     } else {
 | |
|         error(std::string("Cannot open file ") + GET_STRING(args[1]) + " for writing");
 | |
|         return GROUND_BOOL_VAL(false);
 | |
|     }
 | |
| 
 | |
|     return GROUND_BOOL_VAL(true);
 | |
| }
 | |
| 
 | |
| GROUND_LIBRARY_INTERFACE()
 | |
| 
 | |
| GROUND_LIBRARY_INIT()
 | |
|     REGISTER_GROUND_FUNCTION(simpleRequest);
 | |
|     REGISTER_GROUND_FUNCTION(saveContents);
 | |
| GROUND_LIBRARY_INIT_END()
 | |
| 
 | |
| GROUND_LIBRARY_CLEANUP()
 | |
| GROUND_LIBRARY_CLEANUP_END()
 |