アプリ版:「スタンプのみでお礼する」機能のリリースについて

一般的なWeb操作(サイトにログインして、そのログインした状態を保持したまま
そのサイトを閲覧する)といった内容をプログラム上でやりたいと考えています。

当初、HttpWebRequestクラスを使って組んでみました。
結果は、ログインすることは成功するのですが、2回目に別操作のPOSTを実行しよう
とすると、HttpWebRequestインスタンスを再作成せねばならず、ログインした状態が
保持できない状態でのPOSTとなり、うまくいきませんでした。

なので、Socketsクラスを用いて挑戦しているのですが、こちらもうまくいってない状況です。
その状況とは、サイトにログイン(POST)する所がうまくいかないのですが、
コードレベルでいうとSendメソッドを発行した際、Availableプロパティの値が
必ず0になってしまうということです。

この状況までのポイントを記述します。
1.ソケットの接続先ホストのポートは443
2.Connect直後のConnectedはtrue
3.POSTメッセージはHttpWebRequestで成功したメッセージと全く同様
 (つまり、メッセージ自体に問題はないはず?!)
4.Send直後のSelectMode.SelectWriteをPoll結果はtrue
5.Send直後のAvailable = 0

個人的に気になるのは、HttpWebRequest、Socketsそれぞれの通信のパケットを
キャプチャしてみると、HttpWebRequestの時はSSLによるhandshakeプロトコルのやりとりが
見られるのですが、Socketsの時はhandshakeプロトコルは見られず、POSTメッセージを平文で投げています。
このことからもSocketsクラスでのコーディングに何かの処理が足りない、もしくは
どこかが間違っていると思われるのですが、自身では頭打ちといったところです。

回答につきましては、上記問題の解決だけにあらず、冒頭の操作を実行するには
こうした方が簡単、分かりやすい。といった意見でもかまいません。

どうぞ、よろしくお願いいたします。

A 回答 (1件)

> ログインした状態が保持できない状態でのPOSTとなり、うまくいきませんでした。



フォーム認証であれば、Cookieの面倒を見る必要があります。

> Socketsの時はhandshakeプロトコルは見られず、POSTメッセージを平文で投げています。

Socketsクラスが、自動的にSSLによるhandshakeプロトコルでやりとりしてくれるのを期待しているのでしょうか?
おそらく自前でやる必要があるとおもいます。

> こうした方が簡単、分かりやすい

WebBrowserクラスをつかうのが簡単です。
    • good
    • 0
この回答へのお礼

todo36さん、早速の回答ありがとうございました。

アドバイスを頂いてから、今日までいろいろコツコツと
試行錯誤しておりました。

まずSocketsクラスによる手法は「私には敷居が高いな。」
と判断して即、諦めました。

次に、WebBrowserクラスを試してみようと思い、いろいろ
調べてみました。すると、このクラスはフレームワーク2.0
からのサポートのようで、自身が使っているのは基本が1.0
であるNET2002でした。そしてここでもdllのバージョンを
2.0に切替える術が分からず断念してしまいました。

で、最後に最初に挑戦したHttpWebRequestクラスでのCookie
の面倒をみてみることにしました。
これがやっとうまくいきました。ありがとうございました。

誠に厚かましいお願いですが、上記にある参照フレームワーク
のバージョンを変更する手段をご存知でしたらご回答頂けない
でしょうか。
よろしくお願い致します。

お礼日時:2008/09/07 00:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!