tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: AxWebBrowserで Post
投稿日: 2005/09/14(Wed) 10:25
投稿者ふもふも
ポストするデータは、WEB用の特別な?エンコードを使用します。
エンコード後のデータを文字列に直すと
%AE%CA%F3
このようなものとなり、URLエンコードというらしいです。
VB6以前ではこのようなエンコードを行ってくれるメソッドはなかったと思いまが、
VB.NETには用意されており
System.Web.HttpUtility.UrlEncode
が、URLエンコードを行ってくれるメソッドです。
詳細は
hhttp://www.atmarkit.co.jp/fdotnet/dotnettips/212urlencode/urlencode.html
こちらを参照してください。
上記の記事に書かれているように、主要な半角文字は変換されませんが、
半角の"="は変換されてしまいますので注意が必要です。
ですので、書くそれぞれの項目の変数部分?"user="や、"pass="といったものはUR
Lエンコードしないほうがいいでしょう。
また、すべて半角ですむのでしたら、別にURLエンコードをせずともいいと思いますがね。

使用方法は
'URLエンコードでエンコードを行う。
'UrlEncodeメソッドのデフォルトのエンコードがUTF-8なのでUTF-8を使用する場合は、エンコードする
文字列のみでOK
Dim postData As String =
    "uname=" & System.Web.HttpUtility.UrlEncode(TextBox3.Text) &
    "&pass=" & System.Web.HttpUtility.UrlEncode(TextBox4.Text) &
    "&op=login"
'UTF-8以外の場合は第2引数に用意したエンコーディングクラスを設定し実行する
'例ではシフトJISを使用。EUCの場合はSystem.Text.Encoding.GetEncoding("euc-jis")でOK(なはずw)
'Dim postData As String =
'    "uname=" & System.Web.HttpUtility.UrlEncode(TextBox3.Text, System.Text.Encoding.GetEncoding("shift-jis")) &
'    "&pass=" & System.Web.HttpUtility.UrlEncode(TextBox4.Text, System.Text.Encoding.GetEncoding("shift-jis")) &
'    "&op=login"
'あとは、エンコードされた文字列をバイト配列に変換して
System.Text.Encoding.ASCII.GetBytes(PostData)
'ヘッダーを設定後
Headers = "Content-Type: application/x-www-form-urlencoded" & vbCrLf
'WebBrowserのNavigateメソッドのそれぞれの引数を設定して実行
AxWebBrowser1.Navigate(URL, Flags, TargetFrame, postDataBytes, Headers)

とすればうまくいくはずですが。

その前に、プログラムを見るとログインを行いたいのですよね?
Private Sub AxWebBrowser1_BeforeNavigate2(ByVal sender As Object, ByVal e As
AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2Event) Handles AxWebBrowser1.BeforeNavigate2
    System.Diagnostics.Debug.WriteLine(System.Text.Encoding.UTF8.GetString(CType(e.postData, Byte()))
End Sub
を追加して、BeforeNavigate2イベントを拾い、
ログインのページにいき、手入力で実際にユーザー名とパスワードを入力してログインしてみてくださ
い。
すると、出力ウィンドウにポストされるデータが表示されますので、
どのようなデータがポストされているのかが確認できますので、このデータとプログラムで作成した
postData(変数)の
データを比較すると、ポストするデータに不足がないか、使用している文字コード(エンコーディング)は正しいかがわかると思います。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。