.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 を取得するだけであり、どのようにリクエストを行うのかわかりません (そうすると思います)。
私が明確であったことを願っています...アドバイスは非常に(非常に)感謝されます。