edited api class and made it to work

This commit is contained in:
2019-05-05 15:38:48 +02:00
parent de7c0067f3
commit b467ab58fa
14 changed files with 186 additions and 859 deletions

87
src/API.cpp Normal file
View File

@ -0,0 +1,87 @@
//
// Created by lukas on 06.04.19.
//
#include "API.h"
#include <string>
#include <iostream>
#include <stdio.h>
#include <curl/curl.h>
#include <sstream>
#include "Hashmap.h"
std::string API::request(std::string myurl) {
Hashmap<std::string,std::string> map;
std::vector<std::string> str;
return request(myurl,false,map,str);
}
std::string API::request(std::string myurl, bool post, Hashmap<std::string,std::string> &map, std::vector<std::string> headers) {
CURL *curl;
CURLcode res;
curl = curl_easy_init();
struct curl_slist *list = NULL;
for (int j = 0; j < headers.size(); ++j) {
list = curl_slist_append(list, headers.at(j).c_str());
}
std::string readString;
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, myurl.c_str());
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
//ssl verification
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
if(post){
std::cout << "add post data\n";
std::stringstream poststring;
poststring << "{";
for (int i = 0; i < map.size(); i++) {
poststring << "\""+map.getKey(i) << "\": \""+map.getValue(i) << "\"";
if(i < map.size()-1){
poststring << ", ";
}
}
poststring << "}";
std::cout << "post string: " << poststring.str() << "\n";
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, poststring.str().c_str());
}else{
std::string getstring;
for(int i =0; i< map.size();i++){
getstring+=map.getKey(i)+"="+map.getValue(i);
if(i < map.size()-1){
getstring+="&";
}
}
myurl+="?"+getstring;
}
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readString);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return readString;
}
size_t API::write_data(void *contents, size_t size, size_t nmemb, FILE *stream) {
((std::string*)stream)->append((char*)contents, size * nmemb);
return size * nmemb;
}

22
src/API.h Normal file
View File

@ -0,0 +1,22 @@
//
// Created by lukas on 06.04.19.
//
#ifndef IPREFRESHER_API_H
#define IPREFRESHER_API_H
#include <string>
#include "Hashmap.h"
class API {
public:
std::string request(std::string myurl);
std::string request(std::string myurl, bool post, Hashmap<std::string,std::string> &map,std::vector<std::string> headers);
private:
static size_t write_data(void *buffer, size_t size, size_t buffersize, FILE *stream);
};
#endif //IPREFRESHER_API_H

47
src/Hashmap.h Normal file
View File

@ -0,0 +1,47 @@
//
// Created by lukas on 07.04.19.
//
#ifndef QT5PROJECT_HASHMAP_H
#define QT5PROJECT_HASHMAP_H
#include <iostream>
#include <vector>
template <class keytype,class valuetype> class Hashmap {
public:
void add(keytype key,keytype value);
keytype getKey(int position);
valuetype getValue(int position);
int size();
private:
std::vector<keytype> keys;
std::vector<valuetype> values;
};
template<class keytype, class valuetype>
void Hashmap<keytype, valuetype>::add(keytype key, keytype value) {
keys.push_back(key);
values.push_back(value);
}
template<class keytype, class valuetype>
keytype Hashmap<keytype, valuetype>::getKey(int position) {
return keys.at(position);
}
template<class keytype, class valuetype>
valuetype Hashmap<keytype, valuetype>::getValue(int position) {
return values.at(position);
}
template<class keytype, class valuetype>
int Hashmap<keytype, valuetype>::size() {
return keys.size();
}
#endif //QT5PROJECT_HASHMAP_H

29
src/main.cpp Normal file
View File

@ -0,0 +1,29 @@
#include <iostream>
#include "API.h"
int main() {
std::cout << "Hello, World!" << std::endl;
API api;
std::string ip = api.request("https://api.ipify.org");
std::cout << ip <<std::endl;
//api key: 88vNpMfDhMM2YYDNfWR1DNYfRX9W6fYg
Hashmap<std::string, std::string> args;
args.add("name","luki.dynu.net");
args.add("ipv4Address",ip);
std::vector<std::string> headers;
headers.push_back("accept: application/json");
headers.push_back("User-Agent: Mozilla/5.0 (compatible; Rigor/1.0.0; http://rigor.com)");
headers.push_back("API-Key: 88vNpMfDhMM2YYDNfWR1DNYfRX9W6fYg");
std::string dynurepl = api.request("https://api.dynu.com/v2/dns/8506047",true, args,headers);
std::cout << "---" << dynurepl << "\n";
return 0;
}