2

.NET の HttpWebRequest POST メソッド (コードは C# で記述されています) を使用してプログラムでサイトにログインしようとしています。最初に、リクエストをログイン ページに送信し、応答 Cookie を CookieContainer に保存し、ログインの詳細 (email="MyEmail"&pass="MyPassword") をエンコードしてリクエストにストリーミングした 2 つ目の HttpWebRequest を作成しました。

ログインできなかったので、Fiddler を使用してログイン リクエストに添付された Cookie を確認したところ、一部の Cookie に HttpOnly のフラグが付けられていることがわかりました。つまり、これらの Cookie は以前のリクエストの応答ヘッダーには表示されません (言うまでもなく、スクリプト (html または js) にも表示されません)。

here で説明されているように、少し調査を行い、Wininet.dll ライブラリをコードにインポートしました。これが私のコードです:

class CookieReader
{
    static int INTERNET_COOKIE_HTTPONLY = 0X000020000;

    [DllImport("Wininet.dll", SetLastError = true)]

    static extern bool InternetGetCookieEx(string url, string cookieName, StringBuilder cookieData, ref int size, int flags, IntPtr pReserved);

    public static string GetHttpOnly(string url)
    {
        int size = 1024;
        StringBuilder builder = new StringBuilder(size);
        if (InternetGetCookieEx(url, null, builder, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero))
        {
            return builder.ToString();
        }

        else
            return null;
    }
}

2 つの質問があります。まず、InternetGetCookiesEx メソッドは、どの URL に対しても常に false を返します。私は C# を初めて使用するので、最初に疑ったのは、自分のコードに何か問題があるのではないかということでした。

次に、HttpWebRequest POST を InternetGetCookieEx メソッドと組み合わせる方法がわかりません。このメソッドは、ログインの詳細なしで引数として URL を取得するだけであり、どのようにリクエストを行うのかわかりません (そうすると思います)。

私が明確であったことを願っています...アドバイスは非常に(非常に)感謝されます。

4

0 に答える 0