2008年06月09日
VB2005でIPAT通信
- syotaro_yoshida
- 21:14
- コメントする
- カテゴリー:Development
開発中の異常オッズ分析ソフト「シンドローム」 の次期バージョンのために、IPAT通信のクラスライブラリを作成しました。このソフトは、VB2005という.Net Framework2.0上で動作するソフトです。
.Net Frameworkとは、マイクロソフトがWindows向けに公開しているフレームワークで、 巨大なクラスライブラリ群です。一応、.Net Frameworkが動く環境であれば、Linuxでも動くと言うことになっていますが、 基本的にWindowsプラットフォーム専用と考えた方がいいでしょう。
シンプルぱっと2はVB6で作られています。インターネット通信はIEコンポーネントである、 WININET.DLLにより実現しています。そのため、デフォルトの設定はIEに従います。
今回は.Netを使用しているので、.Net Framework2.0のライブラリを利用しました。 さすがに.Netの名前にあるように、ネットワーク関係は充実しています。基本的な命令を組み合わせるだけで、 すぐにCGIにPost出来るようになりました。
Imports System.Net
Public Function PostHttp(ByVal url As String, ByVal post As String) As String
Dim txt As String = ""'■■■ データ取得
Try
Dim byteData As Byte() = System.Text.Encoding.ASCII.GetBytes(post)
Dim request As HttpWebRequestrequest = DirectCast(System.Net.WebRequest.Create(url), HttpWebRequest)
'■■■ POST準備
With request
.Method = "POST"
.ContentType = "application/x-www-form-urlencoded"
.ContentLength = byteData.Length
.UserAgent = "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.1)"
.Referer = m_referer'データをPOST送信するためのStreamを取得
Using rs As Stream = .GetRequestStream()
rs.Write(byteData, 0, byteData.Length)
rs.Close()
End Using
End WithDim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
'■■■ 受信処理
If response.StatusCode = HttpStatusCode.OK Then
Using resStream As Stream = response.GetResponseStream()
Dim sr As New System.IO.StreamReader(resStream, m_encode)
txt = sr.ReadToEnd()
sr.Close()
End Using
End If'■■■ エラー
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly)
End Trym_referer = ""
Return (txt)End Function
-
postするメッセージはバイト型に変換しておく
-
HttpWebRequestにContentTypeやRefererなど必要な設定を追加する
-
受信はストリームリーダーで一発
-
m_refererはリファラーを文字列で指定しておく
-
ストリームリーダーを使用するときに、文字コードを指定しておく。でないと文字化けする
-
m_encodeが文字コード指定。 実際にはSystem.Text.Encoding.GetEncoding("euc-jp")を指定してある(IPATサーバーの文字コード)
WININET.DLLを使用して、POSTするにはもっと長ったらしい構文が必要なので、.Netは本当に楽です。ちなみに、 SSLで送信するにはURLのスキームをhttpsに変えるだけでいけました。
.Netは文字コードの変換も標準ライブラリでこなしてくれるので、外部に変換用DLL(例: NKF32.DLLなど)を置かなくて良いのが非常に楽です。
"VB2005でIPAT通信"へのコメントはまだありません。