一般的な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クラスでのコーディングに何かの処理が足りない、もしくは
どこかが間違っていると思われるのですが、自身では頭打ちといったところです。
回答につきましては、上記問題の解決だけにあらず、冒頭の操作を実行するには
こうした方が簡単、分かりやすい。といった意見でもかまいません。
どうぞ、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
> ログインした状態が保持できない状態でのPOSTとなり、うまくいきませんでした。
フォーム認証であれば、Cookieの面倒を見る必要があります。
> Socketsの時はhandshakeプロトコルは見られず、POSTメッセージを平文で投げています。
Socketsクラスが、自動的にSSLによるhandshakeプロトコルでやりとりしてくれるのを期待しているのでしょうか?
おそらく自前でやる必要があるとおもいます。
> こうした方が簡単、分かりやすい
WebBrowserクラスをつかうのが簡単です。
todo36さん、早速の回答ありがとうございました。
アドバイスを頂いてから、今日までいろいろコツコツと
試行錯誤しておりました。
まずSocketsクラスによる手法は「私には敷居が高いな。」
と判断して即、諦めました。
次に、WebBrowserクラスを試してみようと思い、いろいろ
調べてみました。すると、このクラスはフレームワーク2.0
からのサポートのようで、自身が使っているのは基本が1.0
であるNET2002でした。そしてここでもdllのバージョンを
2.0に切替える術が分からず断念してしまいました。
で、最後に最初に挑戦したHttpWebRequestクラスでのCookie
の面倒をみてみることにしました。
これがやっとうまくいきました。ありがとうございました。
誠に厚かましいお願いですが、上記にある参照フレームワーク
のバージョンを変更する手段をご存知でしたらご回答頂けない
でしょうか。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- サーバー メールサーバーについて詳しい方、メールサーバーの管理業務経験のある方、教えてください。 3 2022/11/12 18:24
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- その他(ブラウザ) Microsoft Edge(最新版)保存中サイトが全てログオフ状態で困っています! 3 2022/06/15 11:02
- Outlook(アウトルック) OCN WEBメールについて 1 2022/05/18 23:33
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- その他(SNS・コミュニケーションサービス) 【至急】Microsoft teamsログインできないループ・・ 3 2023/05/17 13:17
- その他(恋愛相談) 友達に謝るべきですか 3 2023/06/26 11:51
- LINE simフリー端末で前回もっていた端末でline引継ぎ 2 2022/10/07 10:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
ポインタのキャストについて
-
MFC VC++ 6.0 使用
-
継承したクラスを、継承元のク...
-
(UWSC) 「#32770」の意味わかり...
-
不要になった、普通の構造体の処理
-
C++ protectedにアクセス不可
-
メンバ変数のサイズの増加
-
ダイアログ表示時にチェックボ...
-
既定のコンストラクタがない?
-
IncludeではなくClassで宣言す...
-
ウィンドウの背景に画像を配置する
-
MFCアプリのコマンドラインでパ...
-
System.Net.HttpWebRequest、も...
-
クラスのアドレスを引数として...
-
[MFC] CWnd::MessageBoxの警告...
-
VS2005 C++ Expでダイアログの...
-
ボタンのオーナードローについて
-
C#で定数クラスをシングルトン...
-
エディットコントロールのイベ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
WindowsAPIのリストビューの...
-
CMainFrameクラスの使い方
-
DebugクラスとTraceクラスの違い
-
MessageBoxを継承したい
-
C++ protectedにアクセス不可
-
このコンパイルエラーの意味に...
-
MFCのドラッグ&ドロップについて
-
MFCアプリのコマンドラインでパ...
-
【ASP.NET】 独自で作成したク...
-
C#で通常のbuttonコントロール...
-
ダイアログクラスのコントロー...
-
派生クラスから基本クラスprote...
おすすめ情報