@@ -14,42 +14,67 @@ std::string wiki::get(curlpp::Easy &request){
1414 request.perform ();
1515 return response.str ();
1616}
17- std::string wiki::get (const std::string &url,const std::list<std::string> &header){
18- curlpp::Easy request;
17+ void wiki::init_request (curlpp::Easy &request,const std::string &url,const std::vector<std::pair<std::string,std::string>> &formstr,const std::list<std::string> &header){
1918 request.setOpt <curlpp::Options::Url>(url);
2019 request.setOpt <curlpp::Options::HttpHeader>(header);
21- return get (request);
20+ curlpp::Forms form;
21+ for (const std::pair<std::string,std::string> &it:formstr)
22+ form.push_back (new curlpp::FormParts::Content (it.first ,it.second ));
23+ request.setOpt <curlpp::Options::HttpPost>(form);
2224}
2325std::string wiki::get_login_token (const std::string &api,const std::string &cookiejar_path,const std::list<std::string> &header){
2426 curlpp::Easy request;
25- request.setOpt <curlpp::Options::Url>(api+" ?format=json&action=query&meta=tokens&type=login" );
2627 request.setOpt <curlpp::Options::CookieJar>(cookiejar_path);
2728 request.setOpt <curlpp::Options::HttpHeader>(header);
29+ init_request (
30+ request,
31+ api+" ?format=json" ,
32+ {{" action" ," query" },{" meta" ," tokens" },{" type" ," login" }},
33+ header
34+ );
2835 nlohmann::json response=nlohmann::json::parse (wiki::get (request));
29- const std::string token=response[" query" ][" tokens" ][" logintoken" ];
30- return token;
36+ return response[" query" ][" tokens" ][" logintoken" ];
3137}
32- std::string wiki::get_csrf_token (const std::string &api,const std::string &cookie_path ,const std::list<std::string> &header){
38+ std::string wiki::get_csrf_token (const std::string &api,const std::string &login_cookie_path, const std::string &csrf_cookie_path ,const std::list<std::string> &header){
3339 curlpp::Easy request;
34- request.setOpt <curlpp::Options::Url>(api+ " ?format=json&action=query&meta=tokens&type=csrf " );
35- request.setOpt <curlpp::Options::CookieFile>(cookie_path );
40+ request.setOpt <curlpp::Options::CookieFile>(login_cookie_path );
41+ request.setOpt <curlpp::Options::CookieJar>(csrf_cookie_path );
3642 request.setOpt <curlpp::Options::HttpHeader>(header);
43+ init_request (
44+ request,
45+ api+" ?format=json" ,
46+ {{" action" ," query" },{" meta" ," tokens" },{" type" ," csrf" }},
47+ header
48+ );
3749 nlohmann::json response=nlohmann::json::parse (wiki::get (request));
38- const std::string token=response[" query" ][" tokens" ][" csrftoken" ];
39- return token;
50+ return response[" query" ][" tokens" ][" csrftoken" ];
4051}
4152std::string wiki::login (const std::string &api,const std::string &cookie_path,const std::string &username,const std::string &password,const std::string &login_token,const std::list<std::string> &header){
4253 curlpp::Easy request;
43- request.setOpt <curlpp::Options::Url>(api+" ?format=json&action=login" );
4454 request.setOpt <curlpp::Options::CookieFile>(cookie_path);
4555 request.setOpt <curlpp::Options::CookieJar>(cookie_path);
46- curlpp::Forms form;
47- form.push_back (new curlpp::FormParts::Content (" format" ," json" ));
48- form.push_back (new curlpp::FormParts::Content (" action" ," login" ));
49- form.push_back (new curlpp::FormParts::Content (" lgname" ,username));
50- form.push_back (new curlpp::FormParts::Content (" lgpassword" ,password));
51- form.push_back (new curlpp::FormParts::Content (" lgtoken" ,login_token));
52- request.setOpt <curlpp::Options::HttpPost>(form);
53- request.setOpt <curlpp::Options::HttpHeader>(header);
56+ init_request (
57+ request,
58+ api+" ?format=json&action=login" ,
59+ {{" format" ," json" },{" action" ," login" },{" lgname" ,username},{" lgpassword" ,password},{" lgtoken" ,login_token}},
60+ header
61+ );
5462 return wiki::get (request);
5563}
64+ nlohmann::json wiki::upload (const std::string &api,const std::string &cookie_path,const std::string &file_name,const std::string &file_path,const std::string &csrf_token,const std::list<std::string> &header){
65+ curlpp::Easy request;
66+ request.setOpt <curlpp::Options::CookieFile>(cookie_path);
67+ init_request (
68+ request,
69+ api+" ?format=json" ,
70+ {
71+ {" action" ," upload" },
72+ {" filename" ,file_name},
73+ {" file" ,std::string{" @" }+file_path},
74+ {" token" ,csrf_token}
75+ },
76+ header
77+ );
78+ nlohmann::json response=nlohmann::json::parse (wiki::get (request));
79+ return response;
80+ }
0 commit comments