2017-03-14 8 views
0

他の同様の質問がありますが、これも私も読んでいますが、私の問題はユニークです。私はmojang.comにログインしようとしています(依頼しないでください)。その後のリクエストではログインしたままです。しかし、私がPOSTリクエストをログインページに送ったとき、私はログインページをダンプするだけです。ログインページをPASTにするにはどうしたらいいですか?LibCURLのウェブサイトへのログイン

私はクッキーエンジンを起動しており、クッキーは正常に記録され、印刷されていると思われますが、使用されていない可能性があります。

私の目標は、ログインが成功した後、このページにアクセスすることです:https://account.mojang.com/me

session* mojang_login(const char *user, const char *pass, 
     const char *q1, const char *q2, const char *q3) 
{ 
    const char *url = "https://account.mojang.com/login"; 
    const char *payload = construct_payload(user, pass); 
    const char *ua = 
     "Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0"; 
    char errbuf[CURL_ERROR_SIZE] = {0}; 

    CURL *curl; 
    CURLcode res; 

    curl = curl_easy_init(); 

    if (!curl) 
    { 
     fprintf(stderr, "Failed to initialize curl\n"); 
     return NULL; 
    } 

    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 
    curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); 
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 
    curl_easy_setopt(curl, CURLOPT_URL, url); 
    curl_easy_setopt(curl, CURLOPT_USERAGENT, ua); 
    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); 
    curl_easy_setopt(curl, CURLOPT_POST, 1L); 
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload); 
    res = curl_easy_perform(curl); 
    free((void*) payload); 

    if (res != CURLE_OK) 
    { 
     curl_err(res, errbuf); 
     return NULL; 
    } 

    struct curl_slist *cookies; 
    res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies); 

    if (res != CURLE_OK) 
    { 
     curl_err(res, errbuf); 
     return NULL; 
    } 

    while (cookies) 
    { 
     printf("\nCOOKIE DATA: %s\n", cookies->data); 
     cookies = cookies->next; 
    } 

    session *s1 = NULL; /* safe_malloc(sizeof(session));*/ 

    curl_easy_cleanup(curl); 
    return s1; 
} 

答えて

0

(あなたが実際に完全なソースコードを提供していないので、私は正確にあなたを伝えることはできませんが、私はこれに代えて話しますよ問題が一般的な意味で)

まず、login-POSTの前に十分な長さのクッキーを記録する必要があります。一部のサイトでは、ログインページを表示するときにクッキーを設定するので、最初に取得する必要があります。

次に、ブラウザが送信するように、ブラウザの表示には表示されない非表示のフォームフィールドを含めて、ログイン時にすべてを送信する必要があります。これを理解するには、ブラウザのネットワークツールを使用してブラウザが送信する内容を正確に把握し、コードが同じものを送信していることを確認することです。その後、リクエストをできる限りブラウザに近いものにするために、何度か繰り返します。

もちろん、Cookieを有効にする必要があります。ほとんどのログインで別のページに移動するため、リダイレクトを実行する必要があります。

関連する問題