一般的な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ランキング
-
mallocについて
-
へんな現象
-
C#,vb.netで業務用アプリ開発と...
-
インクリメント演算子のみを用...
-
C言語をコンパイルするとコンピ...
-
gccを行ってもexeファイルが生...
-
プログラミングについての質問...
-
double型が正常に認識されてい...
-
C言語の関数と配列に関する質問
-
Linux Cプログラミングを学ぶた...
-
C言語 配列と関数の練習問題
-
Bitcoin、BTCはブロックチェー...
-
Linuxでの開発環境構築や設定の...
-
これなにがちがうんですか??
-
C言語 バッファについて。
-
双方向リスト
-
応用情報技術者試験の令和元年...
-
システムエンジニアの適正について
-
どちのほうがすきですか?
-
Notepad++の関数リスト表示の変...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
WindowsAPIのリストビューの...
-
CMainFrameクラスの使い方
-
DebugクラスとTraceクラスの違い
-
MessageBoxを継承したい
-
C++ protectedにアクセス不可
-
このコンパイルエラーの意味に...
-
MFCのドラッグ&ドロップについて
-
MFCアプリのコマンドラインでパ...
-
【ASP.NET】 独自で作成したク...
-
C#で通常のbuttonコントロール...
-
ダイアログクラスのコントロー...
-
派生クラスから基本クラスprote...
おすすめ情報