タイトル : Re^3: AxWebBrowserで Post経過2 投稿日 : 2005/09/15(Thu) 13:54 投稿者 : 魔界の仮面弁士
私も、AxWebBrowser での POST 処理を行っていますが、 その手順自体は、大きく間違ってはいないと思いますよ。 ただ、送信するデータについては、相手がByRef定義なので、 Dim postDataBytes() As Byte = 送信するバイト配列 ではなく、 Dim postDataBytes As Object = 送信するバイト配列 で渡した方が無難かと思いますけれども。(他の引数のデータ型にも注意) > 送信しているpostDataは > uname=*****&pass=*******&op=login となっています VBから送信した時点のデータではなく、むしろ、Web側に届いている結果を 確認した方が良いかと思いますよ。 さしあたり、サーバ側のログを確認する事はできますか? できないようであれば、 フリーソフトの「InetSpy」などを使って、通信内容を比較してみてください。 > するとVB6で送っているpostDataは > ?????#慰?椽??潮???? となっていました これだとログオンできます これ、SJISデータやASCIIテキスト、UTF-16とみなして表示した場合の化け方に似ていますね。 Unicodeバイナリではなく、SJISバイナリを、MsgBoxやDebug.Print等で確認してはいませんか? 送信するデータは、最終的には String ではなく、Byte() として渡されるのですから、 文字列ではなく、バイナリの値として比較チェックされた方が良いかと。 > vbFromUnicodeについては.netでは相当する定数はないようですね 意味として近いのは、System.Text.Encoding.Default.GetBytes() でしょうかね。 > エンコードの方法を変えなくてはならないのでしょうか IEから/VB6から/VB.NETから送信されるデータが、それぞれまったく同質であるなら、 Webサーバから得られる結果も、本来は同等の物となるはずですよね。 (逆に、異なるデータを送っていたなら、結果もおのずと変わるでしょうけれども) つまり、エンコードの手法はどうあれ、最終的に生成した『バイト配列の内容』が、 VB6版とVB.NET版とで同じになっていれば、POST処理は成功するはずです。 なのでまずは、「どのようにエンコードするか」という点については後回しにして、 > uname=*****&pass=*******&op=login を表す『バイト配列』を固定的に作成し、それを WebBrowser.Navigate して、 それが VB6 と VB.NET とで同じ結果になるのかを確認した方が良いでしょう。 同じデータをNavigateに渡した時に、同じ結果が得られるのであれば、あとは そのエンコード方法のみを調査すれば済むわけですし、逆に、同じデータでも 結果が異なってしまうなら、エンコード方法以外の部分――たとえば引数の渡し方や データ型、あるいはタイプライブラリの内容など――を見直す必要がありますよね。 |