Ich versuche, cURLcpp (nicht cURLpp) zum Senden eines Formulars zu verwenden. In der Readme-Datei finden Sie ein Beispiel für das Senden einer Formularanforderung. Hier ist mein Code:

const std::string authenticityToken = stringMatch.substr(7, stringMatch.length());

curl::curl_form form;
curl::curl_easy easy;
// Forms creation
curl::curl_pair<CURLformoption,std::string> nameForm(CURLFORM_COPYNAME, "username");
curl::curl_pair<CURLformoption,std::string> nameCont(CURLFORM_COPYCONTENTS, "the username");

curl::curl_pair<CURLformoption,std::string> passForm(CURLFORM_COPYNAME, "password");
curl::curl_pair<CURLformoption,std::string> passCont(CURLFORM_COPYCONTENTS, "the password");

curl::curl_pair<CURLformoption,std::string> authForm(CURLFORM_COPYNAME,"authenticityToken");
curl::curl_pair<CURLformoption,std::string> authCont(CURLFORM_COPYCONTENTS, authenticityToken);

try {
    // Form adding
    form.add(nameForm, nameCont);
    form.add(passForm, passCont);
    form.add(authForm, authCont);

    // Add some options to our request
    easy.add<CURLOPT_URL>("https://account.mojang.com/login");
    easy.add<CURLOPT_SSL_VERIFYPEER>(false);
    easy.add<CURLOPT_FOLLOWLOCATION>(1L);
    easy.add<CURLOPT_HTTPPOST>(form);
    // Execute the request.
    easy.perform();
} catch (curl::curl_easy_exception error) {
    // If you want to get the entire error stack we can do:
    curl::curlcpp_traceback errors = error.get_traceback();
    // Otherwise we could print the stack like this:
    error.print_traceback();
    // Note that the printing the stack will erase it
}

Ich erhalte diesen Fehler beim Kompilieren:

C:\Users\Czarek\ClionProjects\Learning\main.cpp: In function 'int main(int, const char**)':
C:\Users\Czarek\ClionProjects\Learning\main.cpp:40:40: error: no matching function for call to 'curl::curl_easy::add(curl::curl_form&)'
         easy.add<CURLOPT_HTTPPOST>(form);

Nun folgte ich dem Beispiel, wie es auf Github skizziert wurde? Was mache ich falsch?

1
Czarek 30 Dez. 2015 im 22:08

2 Antworten

Beste Antwort

Ich habe es herausgefunden. Es stellt sich heraus, dass das Tutorial auf der Website ein bisschen falsch ist. Die Funktion easy.add<OPT>(value) akzeptiert eine Variable curl_httpost. Um es von curl_form zu erhalten, müssen Sie form.get() ausführen. Um es jedoch an die Funktion easy.add() zu übergeben, müssen Sie die Konstante mit const_cast entfernen. Ich glaube, das ist nur ein Fehler in der Bibliothek.

0
Czarek 1 Jän. 2016 im 16:12

Es ist klar, dass die Klasse curl_easy keine Version von add() hat, die curl_form akzeptiert. Es sieht so aus, als wären nur add () -Varianten für CURLOption.

0
SergeyA 30 Dez. 2015 im 19:14