VB2005でIPAT通信

Posted on :| コメント (0)

 開発中の異常オッズ分析ソフト「シンドローム」 の次期バージョンのために、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 HttpWebRequest

        request = 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 With

        Dim 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 Try

    m_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など)を置かなくて良いのが非常に楽です。

コメント

コメントフォームに記入し投稿してください





Search
最近の記事
カテゴリー
過去の記事
Comments
TrackBacks
Feed
Powered by