Restsharpを使用して永続的に認証する方法

authentication c# html-agility-pack rest restsharp

質問

私はWebからデータを取り出し、HtmlAgilityPackを使用して解析するアプリケーションを開発しています。しかし、そう簡単ではなく、データにアクセスするにはログインが必要です。

私はRestsharpを使ってこのように認証しています:

        //class definitions 
        request = new RestRequest("http://allpoetry.com/login", Method.POST);
        request.AddParameter("utf8", "%E2%9C%93");
        request.AddParameter("authenticity_token", "Lr+JtLv7TkZrS73u5scRPbWhuUYDaVF7vd6lkKFF3FKYqNKHircT9v5WCT9EkneTJRsKXaA6nf6fiWopDB0INw==");
        request.AddParameter("referer", url);  // url to the page I want to go
        request.AddParameter("user[name]", "username");
        request.AddParameter("user[password]", "password");
        request.AddParameter("commit", "Log in");
        request.AddHeader("content-type", "application/x-www-form-urlencoded");
        response = client.Execute(request);

これは完全に動作しますが、問題は私が永久にログインすることができないことです、私はRestRequestクラスのこのインスタンスを使って別の要求をすることができません、私はログインしていないというエラーを出します。いくつかのページで作業するのは基本的にurlrefererフィールドに入れますが、別のページに移動するたびにリクエストをしなければならず、これは不便です。

永久にログインするにはどうすれば同じインスタンスから新しいリクエストを行うことができますか?

ありがとうございました!

人気のある回答

いくつかの調査の後、私は答えがクッキーであることを発見しました。要求が行われるたびに、応答にはCookieがあります。私はこのようなクッキーを使いました。

response = client.Execute(request)私はこれを追加:

        request.Resource = url;
        request.Method = Method.GET;
        foreach (var cookie in response.Cookies)
        {
            request.AddCookie(cookie.Name , cookie.Value);  //this adds every cookie in the previous response.
        }
        response = client.Execute(request);
       //use the response as required

これは新しいインスタンスを作成するのではなく、同じrequestを使用してさらなる要求を作成し、それを介してすべてログインしています。

みんなあなたの助けをありがとう!




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ