Web サイトにログインしてアクションを実行する必要があります。Web サイトは REST ベースなので、これを行うことで簡単にログインできます (ログイン情報は URL のクエリ文字列として含まれているため、資格情報を設定する必要はありません)。
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest firstRequest = (HttpWebRequest) WebRequest.Create(loginUrl);
firstRequest.CookieContainer = cookieJar;
firstRequest.KeepAlive = true;
firstRequest.Method = "POST";
HttpWebResponse firstResponse = (HttpWebResponse)firstRequest.GetResponse();
セッションを維持するために Cookie が返され、上記の cookieJar に保存されます。次に、次のような 2 番目のリクエストを行います。
HttpWebRequest secondRequest = (HttpWebRequest) WebRequest.Create(actionUrl);
secondRequest.Method = "POST";
secondRequest.KeepAlive = true;
secondRequest.CookieContainer = cookieJar;
WebResponse secondResponse = secondRequest.GetResponse();
そして、新しいリクエストに必ず Cookie を割り当てます。しかし、何らかの理由でこれが機能していないようです。「セッションがタイムアウトしたか、有効期限が切れました」というエラーが返されますが、これは次々に行われるため、タイミングの問題ではありません。
私は Fiddler を使用して HTTP ヘッダーを調べましたが、これは HTTPS であるため難しいと感じています。(復号化できることはわかっていますが、うまく機能していないようです。)
この残りのサービスの URL を取り、それらを Firefox に貼り付けると、すべて正常に動作するので、接続の反対側ではなく、間違っているに違いありません。
私は HTTPS にあまり詳しくありません。セッションを維持するために他に何かする必要がありますか? 私はクッキーがそれであると思っていましたが、おそらく 2 つの要求にわたって維持する必要があるものは他にありますか?
最初のリクエストを送信したときに返されるヘッダーは次のとおりです (ただし、無実の人を保護するために Cookie を変更しました!)。
X-DB-Content-length=19
Keep-Alive=timeout=15, max=50
Connection=Keep-Alive
Transfer-Encoding=chunked
Content-Type=text/html; charset=WINDOWS-1252
Date=Mon, 16 Nov 2009 15:26:34 GMT
Set-Cookie:MyCookie stuff goes here
Server=Oracle-Application-Server-10g
何か助けていただければ幸いです。アイデアが不足しています。