タイトル : 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(変数)の データを比較すると、ポストするデータに不足がないか、使用している文字コード(エンコーディング)は正しいかがわかると思います。 |