2

Django サーバーにログインする C++ アプリケーションを作成しようとしています。これを探していましたが、特定の質問に対する解決策が見つかりませんでした。

リクエストを行うために、libcurl Web サイトの例の 1 つを使用しています。

#include <stdio.h>
#include <curl/curl.h>

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

    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1/");

        /* Perform the request, res will get the return code */ 
        res = curl_easy_perform(curl);
        /* Check for errors */ 
        if(res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));

        /* always cleanup */ 
        curl_easy_cleanup(curl);
    }
    return 0;
}

そして、ユーザーとパスワードを入れるオプションを見つけました:

curl_easy_setopt(curl, CURLOPT_USERPWD, "luis:123456");

しかし、問題は、Django がこの curl オプションをどのように認識できるかがわからないことです。

その他の可能性として、Django が提供するログイン用のフォームに入力する方法があります。私が使用しているフォームは次のとおりです。

<html><body>
<form method="post" action="/login">
{% csrf_token %}
  {% if form.errors %}
    <p class="error">Login error</p>
  {% endif %}
<table>
<tr>
    <td>Username</td>
    <td>{{ form.username }}</td>
</tr>
<tr>
    <td>Password</td>
    <td>{{ form.password }}</td>
</tr>
</table>

<input type="submit" value="login" />
</form>

</body>
</html>

このオプションでは、私の問題は、C++ と curl を使用してフォームを取得して完成させる方法がわからないことです。

4

4 に答える 4

1

Django Webアプリケーションが通常はそうではない別のログインメカニズムを提供しない限り、ログインフォームデータを含むPOSTリクエストをログインURLに送信する必要があります。

POSTデータを送信し、Djangoログインフォームの処理でユーザーが正常に認証されると、保存して後続のリクエストで使用するCookieが返されます。

また、ログインフォームはタグを使用していることに注意してください。つまり、リクエストでフォームデータをcsrf_token含むCookieとトークンを送信しない場合csrftoken、Djangoはリクエストを拒否します。ログインページを読み込んで送信するときにブラウザが行うHTTPリクエストを確認することをお勧めします。最新のブラウザにはすべて、リクエストを監視するための優れたデバッグツールがあります。

または、Django Webアプリケーションを制御できる場合は、ログインページの表示機能でCSRFトークンの検証を無効にすることができます。

于 2013-01-21T12:56:11.970 に答える
0

完全にはわかりませんが、CURLが行うのは標準のHTTP認証だと思います。フォームがログインフォームであることを知りません。

于 2013-01-21T12:43:19.687 に答える
0

何が起こっているかを確認する最も簡単な方法の 1 つは、wireshark をインストールし、データを見て、それを使用して curl オプションを設計することです。

于 2013-01-21T12:49:28.543 に答える