cURL başarıyla oturum olmadığını nasıl kontrol etmek? c ++

oy
0

bu yüzden bir c ++ dump.txt içine bir web sitesi ve çıkış kaynak koduna giriş yaparsınız senaryoyu yapmaya çalışıyorum. komut başarıyla oturum olmadığını öğrenmek için bir yolu var mı?

kod:

#include pch.h
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <curl/curl.h>
#include <curl/easy.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    CURL *curl;
    CURLcode res;
    FILE* logfile;

    logfile = fopen(dump.txt , wb);

    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_USERAGENT, Mozilla/4.0);
        curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1);
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, );`enter code here`
        curl_easy_setopt(curl, CURLOPT_STDERR, logfile);

        // Visit the login page once to obtain a PHPSESSID cookie
        curl_easy_setopt(curl, CURLOPT_URL, http://forum.nephrite.ro/index.php?app=core&module=global&section=login/);
        curl_easy_perform(curl);


        // Now, can actually login. First we forge the HTTP referer field, or HTS will deny the login
        curl_easy_setopt(curl, CURLOPT_REFERER, http://forum.nephrite.ro/index.php?app=core&module=global&section=login/);
        // Next we tell LibCurl what HTTP POST data to submit
        char data[] = ips_username=xxx&ips_password=xxx;
        char *ptrToString = data;
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
        curl_easy_perform(curl);

        curl_easy_cleanup(curl);

        fclose(logfile);
    }
    return 0;
}
Oluştur 20/10/2018 saat 14:14
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

kullanmak CURLOPT_WRITEFUNCTION & CURLOPT_WRITEDATA gibi bir şey getirilen kıvrılıp sayfasını yakalamak için ve bir "giriş başarılı" dizesini içeriyorsa kontrol

size_t curl_write_callback(const void * read_ptr, const size_t size,
        const size_t count, void *s_ptr)
{
    (*(string*) s_ptr).append((const char*) read_ptr, size * count);
    return count;
}

ve sonra

    curl_easy_setopt(curl, CURLOPT_URL, "http://forum.nephrite.ro/index.php?app=core&module=global&section=login/");
    string html;
    curl_easy_setopt(curl,CURLOPT_WRITEDATA,&html);
    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,curl_write_callback);
    curl_easy_perform(curl);
    if(html.find_first_of("Welcome back Dave!")!=string::npos){
          // login successful!
    } else{
         // login failed
    }

Sadece yerine Welcome back Dave!giriş başarılı olduğunda yalnızca size sunulan bazı dize ile. ve bu arada c ++ kullanırken, CURLOPT_WRITEFUNCTION için lambda kullanmayın, ve sen kullanımını geri arama için bir sınıf üyesiyseniz, sınıf üye fonksiyonu gerekir aksi takdirde çalışma zamanı çöküyor elde etme olasılığınız olduğu, statik olması. . (> o been there, done. <)

Cevap 22/10/2018 saat 07:00
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more