Libcurl C ++-如何发布此特定表单的表单数据?

时间:2018-07-28 23:12:59

标签: html c++ forms libcurl fieldset

如何使用libcurl和C ++发布并提交以下表单的表单数据?

<form id="loginContainer" class="controllerContainer" action="/j_spring_security_check" method="post">

<h2>Login</h2>
<hr>
<fieldset>

    <div class="field">
        <input class="standard" name="j_username" autocomplete="off" autocapitalize="off" size="25" placeholder="Enter Username">
    </div>
    <div class="field">
        <input class="standard" name="j_password" type="password" value="" size="25" autocapitalize="off" autocomplete="off" placeholder="Enter Password (case-sensitive)">
    </div>
    <div class="field">
        <button class="login" type="submit"></button>
    </div>

</fieldset>

我尝试了curl网站上的几个示例,但是没有一个对我有用。

编辑:这是我登录的功能

void loginToWebsite(std::string url, std::string userAgent, std::string username, std::string password)
{
    CURL *curl;
    CURLcode res;
    curl = curl_easy_init();

    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_USERAGENT, userAgent.c_str());
        curl_easy_setopt(curl, CURLOPT_POST, 1L);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ("j_username=" + username + "&j_password=" + password).c_str());
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
        curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3L);
        curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");

        res = curl_easy_perform(curl);
    }

1 个答案:

答案 0 :(得分:1)

您正在泄漏curl对象。使用完后,您需要致电curl_easy_cleanup()

但是,更重要的是,您错误地使用了CURLOPT_POSTFIELDS。您正在向其传递指向临时char*的{​​{1}}指针,该指针立即超出范围,在调用std::string时,curl带有指向无效内存的悬挂指针。您需要

您还需要对发布的表单参数进行url编码。您可以为此使用curl_easy_escape()

话虽如此,请尝试以下类似操作:

std::string