forked from ground/ground
Organisation, documentation, mathlib
This commit is contained in:
52
extlibs/request/request.cpp
Normal file
52
extlibs/request/request.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#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()
|
Reference in New Issue
Block a user