簡體   English   中英

在C ++中的函數中使用CURL

[英]Using CURL in function in c++

我正在嘗試使用函數在C ++中使用curl。 例:

#define ...
...
...

/*  CURL parameters */
CURL *curl = curl_easy_init();
CURLcode res;
string readBuffer;

void setHeader(){
    if(curl) {
        /*  Headers */
        struct curl_slist *chunk = NULL;
        chunk = NULL;
        chunk = curl_slist_append(chunk, "Connection:keep-alive");
        ..
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); 
    }    
}

void myFunction1(){
    setHeader();
    curl_easy_setopt(curl, CURLOPT_URL, "....");
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookiePath);
    curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookiePath);
    res = curl_easy_perform(curl);
    cout << readBuffer;
    curl_easy_cleanup(curl); 
}

void myFunction2(){
    setHeader();
    curl_easy_setopt(curl, CURLOPT_URL, "....");
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookiePath);
    curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookiePath);
    res = curl_easy_perform(curl);
    cout << readBuffer;
    curl_easy_cleanup(curl);
}

在主函數中,我調用myFunction1或myFunction2;

我不知道以這種方式使用libcurl是否正確,但是我遇到了問題。 我用它來登錄我的網站,所以我用以下代碼保存cookie:

curl_easy_setopt(curl, CURLOPT_COOKIEFILE, cookiePath);
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, cookiePath);
int main(){
curl_global_init(CURL_GLOBAL_ALL);
myFunction1();
myFunction2();
curl_global_cleanup();
}

假設我登錄並將cookie保存在myFunction1中。 當我嘗試在myFunction2中進行設置時,它在CURLOPT_COOKIEFILE行上崩潰。 我不知道為什么將cookie保存在文件中,但是由於我在運行該程序時崩潰,因此無法使用它。

對不起,我的英語謝謝

我出現問題的原因是,當我使用curl_easy_cleanup(curl)然后使用curl_easy_init時,我更改了sessionID,因此保存的cookie不再有效。 因此,我首先使用curl_easy_init,然后在函數中發出所有請求,然后在程序結尾使用curl_easy_cleanup。 要清理CURL OPTION,可以使用:curl_easy_reset()。 我已為可能遇到相同問題的人們更新了此帖子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM