タイトル | : Re^5: AxWebBrowserで Post経過2 |
記事No | : 2147 |
投稿日 | : 2005/09/16(Fri) 17:26 |
投稿者 | : 魔界の仮面弁士 |
> 最初に気がついたことは.netからの送信はGETを使用していることでした 少なくとも、当方ではPOSTでの送信もできているのですけれどね……。 ちなみに、当方でチェックしたコードはこんなイメージです。参考になれば。
Dim URL As String = "http://〜〜" Dim postDataBytes As Object = 「POST内容のバイト配列」 Dim Flags As Object = 0 Dim TargetFrame As Object = "_top" Dim Headers As Object = "Content-Type: application/x-www-form-urlencoded" & vbCrLf AxWebBrowser1.Navigate(URL, Flags, TargetFrame, postDataBytes, Headers)
> method=postをどこかに入れなければと思いpostDataの中に入れてみましたが POSTメソッドになるかGETメソッドになるかは、PostData引数に依存しています。 ちなみに、WebBrowserコントロールの仕様では、このようになっています。
PostData
Optional. Data to send to the server during the HTTP POST transaction. For example, the POST transaction is used to send data gathered by an HTML form to a program or script. If this parameter does not specify any post data, the Navigate method issues an HTTP GET transaction. This parameter is ignored if URL is not an HTTPURL.
> VB6で送ったpostDataはuname=*****&pass=*******&op=loginとなっていましたが > .netからの送信内容は 離 の全角1字。。。 メソッドのみならず、送信しているデータまで間違っているのなら、 結果が異なっても仕方ないですね……。(^^;
> 昨日教えていただいた『バイト配列』を固定的に作成という下りが理解できませんでした では、現在はVB6からの送信はできているようなので、VB6と絡めた形で説明してみますと。
VB6で送信データを作る時は、たとえばVB6のUnicode文字列をそのまま渡すのではなく、 Dim B() As Byte B = StrConv("uname=abc", vbFromUnicode) のようにして、StrConvを使ってASCIIテキストのバイナリにしてから送信していませんでしたか?
この場合、エンコードをプログラムで行う(StrConv等で変換して生成する)のではなく、 ReDim B(9) As Byte B(0) = 117 B(1) = 110 B(2) = 97 : : のような形式で書いていっても、同一の送信データを作成できますよね。 このように、配列の内容を手動で作ってしまう、という事です。 # VB.NET でいえば、 # Dim B() As Byte = New Byte() {117, 110, 97, 109, 101, 61, 97, 98, 99} # のような形式でしょうか。
もちろん、代入するバイナリ値については、別途調べなければなりませんが、 先の No.2137 の段階では、エンコードの手順などに問題があったのか、 『PostDataに変化はありませんでした』という発言をされていましたので、 ならばエンコード部の作りこみは後回しにして、それよりも、正しいデータを 固定的に用意して、それを送信した時、IE6 や VB6 の場合と同じ結果が得られるように 尽力する方が先決かと思った次第です。
|