[ホーム] [会社概要] [製品] [サポート]
[BASP21 Pro] [FAQ] [アプリケーションガイド] [ユーザガイド] [リファレンス]
[FTP オブジェクト] [ソケット オブジェクト]
English

BASP21 Pro ソケット オブジェクト

■ インストール方法

BASP21 Pro ソケット オブジェクトの提供ファイルを以下に示します。
ファイル名 説明
BSocket.dll BASP21 Pro ソケット オブジェクト本体。動作に必要なDLL はこれのみです。
BSocket.tlb Visual C++ でBASP21 Pro ソケット オブジェクトを呼出すときに#importで 指定するタイプライブラリ。Visual C++でオブジェクトを使用しない場合は、不要です。

任意のフォルダにBSocket.dllをコピーして regsvr32 コマンドで インストールします。インストールするフォルダはどこでもかまいません。
 regsvr32 c:\b21\BSocket.dll
 regsvr32 c:\b21\x64\BSocket.dll    ..... x64版
Visual C++でオブジェクトを使用する場合は、BSocket.tlbをフォルダにコピーします。

アンインストール方法は、regsvr32コマンドで /u オプションをつけて実行します。
 1. regsvr32 /u c:\b21\BSocket.dll
    regsvr32 /u c:\b21\x64\BSocket.dll    ..... x64版
 2. BSocket.dllをフォルダから削除します。

■ オブジェクトの使い方

CreateObjectメソッドで"basp21pro.socket" という名前でオブジェクトを作成します。
   Set bsocket = Server.CreateObject("basp21pro.socket")   ' ASP
   Set bsocket = CreateObject("basp21pro.socket")          ' VBA や VB
   Set bsocket = WScript.CreateObject("basp21pro.socket")  ' WSH
作成したオブジェクトでメソッドを呼出します。
   変数 = bsocket.メソッド名(パラメータ)
C#でのコンパイル方法は、以下のように/Rでアセンブリファイルを指定します。
   csc /R:BSOCKETLib.dll C#ソースファイル名

■ Visual Studio .Net 2003でのオブジェクトの使い方

[新規作成]-[プロジェクト]で、[Visual C#プロジェクト]-[コンソールアプリケーション]を 選択してプロジェクトを作成します。


次に[プロジェクト]-[参照の追加]-[COM]で BSocket を選択して参照を追加します。


以下のようにオブジェクトを作成して使用します。
BSOCKETLib.Imain bsocket = new BSOCKETLib.main();


■ リファレンス


Connect
Close
BinaryRead
BinaryWrite
Debug
DebugClear

GetProxy
Read
Read2
ReadLine
ReadLine2

SSLConnect
SSLHandShake

Write
WriteHex


LogFile
Result

■ Connectメソッド
TCP/IPでホストとの接続を確立します。ストリーム・ソケットをサポートします。
rc = bsocket.Connect(dest,port[,timeout])
引数
dest [in]  : 接続先のIPアドレスまたはネットワークホスト名。
port [in]  : ポート番号。
timeout [in]  : 通信タイムアウト値を秒単位で指定。省略値(120)。
rc [out]  : 結果コードが数字で返されます。
  0 : 接続OK
  0以上 : Winsock Error
        11001 ホスト名が見つからない 
        10061 ポート番号に対応したアプリケーションがない、またはシャットダウン中
  -1 : ソケットオープンエラー 
  -2 : タイムアウト
  -99 : basp21p.ini ファイルが見つからないか、ライセンスキーの誤り
解説
ホストとの接続を確立します。
使用例
rc = bsocket.Connect("www.hogehoge.com",80)
関連項目

■ Closeメソッド
接続を切断します。
bsocket.Close()
引数
なし。
解説
接続を切断します。
使用例
bsocket.Close()
関連項目

■ BinaryReadメソッド
ローカルファイルを読込んでバイト配列を返します。
barray = bsocket.BinaryRead(fname[,offset[,len]])
引数
fname  [in]    : ファイル名をフルパスで指定します。
offset [in]    : オフセット。既定値は 0。
len    [in]    : 読込みバイト数。既定値は0で、すべてのバイト数。
barray [out]   : バイナリが配列で返ります。
bsocket.Resultプロパティに結果コードが数字で返されます。
  1以上 : 正常終了。読込みバイト数
  -1 : ファイルオープンエラー 
  -2 : ファイルサイズが0
  -3 : オフセット値オーバー
  -4 : メモリ不足エラー
  -5 : ファイルアクセスエラー
  -6 : ファイル読込みエラー
解説
バイナリデータを変数に読込むときに使います。
ソケットを操作するメソッドではありません。
使用例
barray = bsocket.BinaryRead(bsocket.Home & "h.xls")
関連項目
BinaryWriteメソッド

■ BinaryWriteメソッド
バイナリデータをローカルファイルに書込みます。イメージファイルなどをファイルとして 保存するときに使います。
wlen = bsocket.BinaryWrite(barray,fname[,mode])
引数
barray [in]    : 1バイトの配列を渡します。
fname  [in]    : ファイル名をフルパスで指定します。
mode   [in]    : 上書きモード。0 : 新規作成。 1 : 追加書込み。
                 省略すると新規作成。
wlen   [out]   : 書込み後のファイルサイズが返ります。
                 0未満の値はエラーです。
  -1 : バイト配列エラー 
  -2 : ファイルオープンエラー 
  -3 : ファイルアクセスエラー
  -4 : ファイル書込みエラー
解説
ソケットを操作するメソッドではありません。
使用例
wlen = bsocket.BinaryWrite(barray,"g:\h2.jpg")
wlen = bsocket.BinaryWrite(barray,"g:\h2.jpg",1)   ' 追加書込み
関連項目
BinaryReadメソッド

■ Debugメソッド
メモ帳のウィンドウに指定した文字列を書込みます。 メモ帳は、あらかじめ起動しておくか、DebugClearメソッドで起動できます。
bsocket.Debug(str)
引数
str [in]   : 書込みたい文字列を指定します。
解説
クライアントサイドでスクリプトのデバッグなどで使います。
まず、ウインドウタイトル[BSocket Debug] のメモ帳アプリケーションを探し、
見つからない場合、[無題]のメモ帳アプリケーションが選択されます。
実行後は、選択されたメモ帳のタイトルは、[BSocket Debug] となります。
使用例
bsocket.DebugClear 1                ' メモ帳ウインドウが起動されてなければ起動
bsocket.Debug "Hello World"       ' おなじみ
関連項目
DebugClearメソッド

■ DebugClearメソッド
メモ帳ウィンドウをクリアします。メモ帳を起動することもできます。
bsocket.DebugClear [opt]
引数
opt [in]   : メモ帳が起動していなければ、起動して待つ秒数。
             既定値は、 0 で起動しません。
解説
まず、ウインドウタイトル[BSocket Debug] のメモ帳アプリケーションを探し、
見つからない場合、[無題]のメモ帳アプリケーションが選択されます。
[無題]ウインドウも見つからない場合は、秒数が指定されていれば起動して、
その秒数待ちます。
実行後は、選択または起動されたメモ帳のタイトルは、[BSocket Debug] となります。
使用例
bsocket.DebugClear 1                ' メモ帳ウインドウ起動
関連項目
Debugメソッド

■ GetProxyメソッド
IEのプロクシ情報を取得します。
string = bsocket.GetProxy(type)
引数
type [in]   : 種類名。"http" "https"または"ftp"を指定します。
             ""を指定すると設定されているすべての種類を取得します。
解説
IEのインターネットのオプションでプロクシ設定が有効の場合のみ取得可能です。
ソケットを操作するメソッドではありません。
IISのASPおよびASP.NET環境では動作しません。
使用例
proxy = bsocket.GetProxy("http")
関連項目

■ Readメソッド
接続先からデータを受信します。バイナリや16進フォーマットを指定できます。
rc = bsocket.Read(data[,mode])
引数
data [in]  : データを受取る変数。Visual BasicではVariantを指定します。
mode [in]  : 受取るデータ形式を次のように指定します。
  0 : 文字列(省略値)
  1 : バイナリ。1バイトの配列でデータが返されます。
  2 : 16進形式の文字列。
  16 : 文字列。到着したデータをピークします。データは、バッファに残します。
  17 : バイナリのピーク。
  18 : 16進形式のピーク。
rc [out]  : 結果コードが数字で返されます。
  0 : 受信OK
  0以上 : Winsock Error
  -1 : ソケットクローズ 
  -2 : タイムアウト
  -3 : データなし
解説
JScriptでは Read2 メソッドを使ってください。
使用例
rc = bsocket.Read(0)
関連項目

■ Read2メソッド
接続先からデータを受信します。バイナリや16進フォーマットを指定できます。
data = bsocket.Read2([mode])
引数
data = bsocket.Read2([mode])
data [out]  : データを受取る変数。Visual BasicではVariantを指定します。
mode [in]  : 受取るデータ形式を次のように指定します。
  0 : 文字列(省略値)
  1 : バイナリ。1バイトの配列でデータが返されます。
  2 : 16進形式の文字列。
  16 : 文字列。到着したデータをピークします。データは、バッファに残します。
  17 : バイナリのピーク。
  18 : 16進形式のピーク。
bsocket.Resultプロパティに結果コードが数字で返されます。
  0 : 受信OK
  0以上 : Winsock Error
  -1 : ソケットクローズ 
  -2 : タイムアウト
  -3 : データなし
解説
使用例
data = bsocket.Read2(0)
関連項目

■ ReadLineメソッド
接続先からデータを1行単位に受信します。
rc = bsocket.ReadLine(data)
引数
data [in]  : データを受取る変数。Visual BasicではVariantを指定します。
改行コードが削除されて渡されます
rc [out]  : 結果コードが数字で返されます。
  0 : 受信OK
  0以上 : Winsock Error
  -1 : ソケットクローズ 
  -2 : タイムアウト
  -3 : データなし
解説
JScriptでは ReadLine2 メソッドを使ってください。
使用例
rc = bsocket.ReadLine(data)
関連項目

■ ReadLine2メソッド
接続先からデータを1行単位に受信します。
data = bsocket.ReadLine2()
引数
data [out]  : データを受取る変数。Visual BasicではVariantを指定します。
改行コードが削除されて渡されます
bsocket.Resultプロパティに結果コードが数字で返されます。
  0 : 受信OK
  0以上 : Winsock Error
  -1 : ソケットクローズ 
  -2 : タイムアウト
  -3 : データなし
解説
使用例
data = bsocket.ReadLine2()
関連項目

■ SSLConnectメソッド
TCP/IPでホストとの接続を確立します。ストリーム・ソケットをサポートします。
rc = bsocket.SSLConnect(dest,port[,timeout])
引数
dest [in]  : 接続先のIPアドレスまたはネットワークホスト名。
port [in]  : ポート番号。
timeout [in]  : 通信タイムアウト値を秒単位で指定。省略値(120)。
rc [out]  : 結果コードが数字で返されます。
  0 : 接続OK
  0以上 : Winsock Error
        11001 ホスト名が見つからない 
        10061 ポート番号に対応したアプリケーションがない、またはシャットダウン中
  -1 : ソケットオープンエラー 
  -2 : タイムアウト
解説
ホストとの接続を確立します。
SSL を使って通信を暗号化する場合には SSLConnect を使います。
SSLHandShakeメソッドでSSL セッションが開始されます。

注意:SSLConnectメソッド、SSLHandShakeメソッドによるSSL通信は、
以下のOSでのみサポートします。
- Windows 2003/2008 Server
- Windows XP
- Windows Vista

使用例
rc = bsocket.SSLConnect("www.hogehoge.com",443)
関連項目
SSLHandShakeメソッド

■ SSLHandShakeメソッド
SSL プロトコルのハンドシェークを実行します。
rc = bsocket.SSLHandShake([mode][[server/]userpass])
引数
mode     [in]  : SSLバージョン番号を指定。規定値は3。
                 "SSL=2" - SSLバージョン2。
server   [in]  : サーバ証明書を認証する場合にサーバ名を指定します。
                 省略可能です。
                 テスト用証明書で動作を確認する場合は省略してください。
userpass [in]  : 他のユーザアカウントで実行したいときに指定します。
                 server を同時に指定する場合は、"/" で区切ります。
                 user:pass アカウント名とパスワードの間を":" で区切ります。
                 省略可能です。
rc [out]       : 結果コードが数字で返されます。
  0 : ハンドシェーク完了
  -1 : ソケットオープンエラー 
  -2 : タイムアウト
  -100 : 証明書期限切れ(サーバ名を指定した場合)
  -108 : ルートが認証できない証明書(サーバ名を指定した場合)
  -111 : 証明書失効(サーバ名を指定した場合)
  -112 : ルートが認証できないテスト証明書(サーバ名を指定した場合)
  -114 : サーバ名が一致しない(サーバ名を指定した場合)
  -2146893042 : アカウント権限不足。
  以外 : Winsock または Secure API エラー
解説
事前にSSLConnectメソッドを実行する必要があります。
SSLHandShakeメソッド完了後に、Write系メソッド、Read系メソッドによる
暗号化通信が可能です。

IIS配下で実行する場合、匿名ユーザでは SSLHandShakeメソッドが失敗します。
AdminユーザまたはSystemユーザ権限を持つアカウントを指定する必要があります。
rc = bsocket.SSLHandShake("user1:pass1")

プロクシを経由してSSL通信を行う場合は、SSLHandShakeメソッドは、
CONNECTコマンドデータ通信後に 呼出してください。

注意:SSLConnectメソッド、SSLHandShakeメソッドによるSSL通信は、
以下のOSでのみサポートします。
- Windows 2003/2008 Server
- Windows Me
- Windows XP
- Windows Vista

使用例
rc = bsocket.SSLConnect("www.hogehoge.com",443)
rc = bsocket.SSLHandShake()  ' テスト証明書でもOK
rc = bsocket.SSLHandShake("www.hogehoge.com") ' 証明書を認証する
関連項目
SSLConnectメソッド

■ Writeメソッド
接続先にデータを送信します。
rc = bsocket.Write(data)
引数
data [in]  : 送信データ変数。Visual BasicではVariantを指定します。
バイナリを送信する場合は、1バイト配列で指定します。
rc [out]  : 結果コードが数字で返されます。
  0 : 送信OK
  0以上 : Winsock Error
  -1 : ソケットクローズ 
  -2 : タイムアウト
解説
ファイルの内容を送信する場合は、BinaryReadメソッドで読込んだ変数を指定します。
bindata = bsocket.BinaryRead(fname)
rc = bsocket.Write(bindata)
使用例
rc = bsocket.Write(data)
関連項目

■ WriteHexメソッド
接続先にデータを送信します。16進形式文字で指定されたデータを内部でバイナリに 変換して送信します。
rc = bsocket.WriteHex(data)
引数
data [in]  : 送信データ変数。Visual BasicではStringを指定します。
rc [out]  : 結果コードが数字で返されます。
  0 : 送信OK
  0以上 : Winsock Error
  -1 : ソケットクローズ 
  -2 : タイムアウト
解説
バイナリデータを簡単に文字列で表現して指定するときに使います。
使用例
rc = bsocket.WriteHex("0001FFFF")
関連項目

■ LogFileプロパティ
メソッドの実行結果を書き込むログファイル名を設定します。値の取得も可能です。
bsocket.LogFile = string
引数
string   [out]  : ログファイル名をフルパスで指定します。
解説
メソッドの処理開始時と終了時の情報をログファイルに書込みます。
ファイルのアクセスエラーなどの詳細情報を記録します。
ログレコードの形式は、次のとおりです。
yyyy/mm/dd hh:mm:ss.sss nnn メソッド名 begin  パラメータ
yyyy/mm/dd hh:mm:ss.sss nnn メソッド名 end    終了情報

nnn: Win32 のスレッドID。メソッド呼出しをスレッド間で区別するために記録します。

ログファイルは、書き込み時に排他的に使われます。
使用例
bsocket.LogFile = "c:\ttemp\log.txt"
関連項目

■ Resultプロパティ
メソッドの実行結果を取得します。
number = bsocket.Result
引数
number   [out]  : メソッドの実行結果を数値で返します。
解説
値の意味は、呼出したメソッドにより異なります。
使用例
rc = bsocket.Result
関連項目


■ サンプル

■ HTTPダウンロード (WSH VBScript)
Webサーバに接続して画像ファイルをダウンロードします。 IEのプロクシ情報を使用します。
''==== httpget.vbs
Set bsocket = WScript.CreateObject("basp21pro.socket")
bsocket.DebugClear 1
proxy = bsocket.GetProxy("http")
host = "www.hogehoge.com"
server = host
port = 80
path = "/data/images/good.jpg"
if proxy <> "" then   ' プロクシあり?
  path = "http://" & server & path
  a = Split(proxy,":")
  server = a(0)   ' プロクシサーバ名
  port = a(1)     ' プロクシポート番号
end if
rc1 = bsocket.Connect(server,port, 10)
if rc1 <> 0 then
  bsocket.debug "connect error " & rc1
  WScript.quit
end if
cmd = "GET " & path & " HTTP/1.0"
host = "Host: " & host & vbCrLf
rc1 = bsocket.write (cmd & vbCrLf & host & vbCrLf)
if rc1 <> 0 then
  bsocket.debug "write error " & rc1
  WScript.quit
end if
bsocket.readline datas
bsocket.debug datas
While rc1 = 0 And Len(datas) > 0  ' ヘッダーを読み飛ばす
    rc1 = bsocket.readline(datas)
    bsocket.debug datas
Wend
rc1 = bsocket.read(datax, 1)      ' イメージをバイナリ読込み
mode = 0: lenx = 0
While rc1 = 0    'ファイルに書込みます
  lenx = lenx + UBound(datax) + 1
  rc1 = bsocket.BinaryWrite(datax, "c:\temp\good.jpg", mode)
  mode = mode + 1
  rc1 = bsocket.read(datax, 1)
Wend
bsocket.debug "Done. " & lenx

■ HTTPファイルアップロード (WSH VBScript)
Webサーバに接続してExcelファイルをアップロードします。
''=== upload.vbs
Set bsocket = WScript.CreateObject("basp21pro.socket")   
rc1 = bsocket.Connect("server.com", 80, 120)
bsocket.debugclear 1
bsocket.debug rc1
fname = "c:\data\data.xls"   ' アップロードするファイル名
cmd2 = "--sep" & vbCRLF & _ 
        "Content-Disposition: form-data; name=""file1""; " & _
        "filename=""" & fname & """" & vbCRLF & _ 
        "Content-Type: text/plain" & vbCRLF & vbCRLF
cmd3 = bsocket.BinaryRead(fname)   ' 送信ファイルをバイナリで読みます
cmd4 = vbCRLF & "--sep--" & vbCrLf
conlen = len(cmd2) + Ubound(cmd3) + 1 + len(cmd4)  ' 長さを求めます
cmd1 =  "POST /test/fileup.asp HTTP/1.0" & vbCRLF & _ 
        "Content-Type: multipart/form-data; " & _
        "boundary=""sep""" & vbCRLF & _ 
        "Content-Length:" & conlen & vbCrLf & vbCrLf
rc1 = bsocket.write (cmd1)
rc1 = bsocket.write (cmd2)
rc1 = bsocket.write (cmd3)  ' バイナリもそのまま送れます
rc1 = bsocket.write (cmd4)
bsocket.debug cmd1 & cmd2
rc1 = bsocket.read(data)    ' 結果を受信します
bsocket.debug data

■ telnetでshellコマンド実行 (WSH VBScript)
UNIXサーバに接続してshellコマンドを実行します。
''=== telnet.vbs
Set bsocket = Wscript.CreateObject("basp21pro.socket")
bsocket.Debugclear 1
dim cmd  ' 受信データバッファ グローバル変数
dim ps1  ' シェルプロンプト グローバル変数
ps1 = "$"  ' Bシェルの場合
account = "guest"
password = "hoge"
svr="your.server"
rc = bsocket.connect(svr,23,10)  ' 接続 ポート23 タイムアウト10秒
TelnetNego                 ' telnet ネゴシエーション
' 16進モードだったので
HexWait "6C6F67696E3A"      ' ログインプロンプトlogin: を待ってアカウント名を送信
bsocket.Write account & vbcr     ' ユーザアカウント送信
Wait "Password:"            ' パスワードプロンプトPassword:を待つ
bsocket.Write password & vbcr   ' パスワード送信
Wait ps1                    ' シェルプロンプト$を待つ
res = Shell("cat .profile")     ' シェルコマンド実行
bsocket.Debug res
bsocket.Write "exit" & vbcr       ' bye.
bsocket.Debug "end of telnet session."
WScript.Quit
' telnet ネゴシエーション
Sub TelnetNego
  a ="FFFB18FFFD03FFFB03FFFD01FFFB1F"  ' telnet ネゴシエートコマンド
  bsocket.WriteHex a
  Do While 1  ' telnet ネゴシエート開始
    c = ReadCommand()  ' 16進モードでコマンドを受信
    bsocket.Debug c
    Select Case Mid(c,1,6)
      Case "FFFD20","FFFD23","FFFD27","FFFD01","FFFD21","FFFD24"
         bsocket.WriteHex "FFFC" & Mid(c,5)
      Case "FFFB05"
         bsocket.WriteHex "FFFE" & Mid(c,5)
      Case "FFFD1F"  ' IAC SB Window
         bsocket.WriteHex "FFFA1F00500018FFF0"   ' window size  80x24
         'bsocket.WriteHex "FFFA1F00840020FFF0"   ' window size  132x32
      Case "FFFA18"  ' IAC SB Terminal-Type
         bsocket.WriteHex "FFFA18007674313030FFF0"   ' IAC SB Terminal-Type vt100
      Case ""  ' コマンド終了
         Exit Do
    End Select
  Loop
End Sub

' ネゴシエートコマンドを1個ずつ読む
Function ReadCommand
  ReadCommand = ""
  While Len(cmd) < 6    ' cmd はグローバル変数
    rc = bsocket.Read(b,2) ' 16進モード
    if rc <> 0 Then
       bsocket.Debug "Read Error " & rc
       WScript.Quit
    End If
    cmd = cmd & b
  Wend
  c = Mid(cmd,1,4) 
  If c = "FFFB" or c = "FFFD" or c = "FFFE" Then ' FFxxxx 
    ReadCommand = Mid(cmd,1,6)
    cmd = Mid(cmd,7)
    Exit Function
  End If
  If c = "FFFA" Then  ' SB 可変長。SE(FFF0) までがコマンド
    While InStr(cmd,"FFF0") <= 0
      rc = bsocket.Read(b,2) ' 16進モード
      if rc <> 0 Then
        bsocket.Debug "Read Error " & rc
        WScript.Quit
      End If
      cmd = cmd & b
    Wend
    i = InStr(cmd,"FFF0")
    ReadCommand = Mid(cmd,1,i+3)
    cmd = Mid(cmd,i+4)
 end if
End Function

' 指定された文字列を16進モードで受信したら送信
Sub HexReadWrie(indata,outdata)
  While InStr(cmd,indata) <= 0  ' cmd はグローバル変数
    rc = bsocket.Read(b,2) ' 16進モード
    if rc <> 0 Then
       bsocket.Debug "Read Error " & rc
       WScript.Quit
    End If
    cmd = cmd & b
  Wend
  bsocket.Write outdata
  cmd = ""
End Sub

' 指定された文字列を受信したら送信
Sub ReadWrite(indata,outdata)
  While InStr(cmd,indata) <= 0
    rc = bsocket.Read(b)
    if rc <> 0 Then
       bsocket.Debug "Read Error " & rc
       WScript.Quit
    End If
    cmd = cmd & b
  Wend
  bsocket.Write outdata
  cmd = ""
End Sub

' 指定された文字列を受信するまでwait
Sub Wait(indata)
  bsocket.Debug "Wait " & indata
  While InStr(cmd,indata) <= 0
    rc = bsocket.Read(b)
    if rc <> 0 Then
       bsocket.Debug "Read Error " & rc
       WScript.Quit
    End If
    cmd = cmd & b
  Wend
  cmd = ""
End Sub

' 指定された文字列を受信するまでwait
Sub HexWait(indata)
  While InStr(cmd,indata) <= 0
    rc = bsocket.Read(b,2)      ' 16進モードで受信
    if rc <> 0 Then 
       bsocket.Debug "Read Error " & rc
       WScript.Quit
    End If
    cmd = cmd & b
  Wend
  cmd = ""
End Sub
' shellコマンド実行
Function Shell(outdata)
  bsocket.Debug "Shell " & outdata
  bsocket.Write outdata & vbCr           ' 
  data = ""
  While Right(data,2) <> "$ "    ' 
    rc = bsocket.Read(b)
    if rc <> 0 Then
       bsocket.Debug "Read Error " & rc
       WScript.Quit
    End If
    data = data & b
  Wend
  Shell = Mid(data,1,Len(data)-2)  ' 最後の "$ " を除く
End Function

■ HTTP SSLダウンロード (WSH VBScript)
SSLでWebサーバに接続して画像ファイルをダウンロードします。 IEのプロクシ情報を使用します。
''==== httpsget.vbs
proxy = bsocket.GetProxy("https")
host = "www.hogehoge.com"
server = host
port = 443
path = "/data/images/good.jpg"
if proxy <> "" then   ' プロクシあり?
  a = Split(proxy,":")
  server = a(0)   ' プロクシサーバ名
  port = a(1)     ' プロクシポート番号
  rc1 = bsocket.SSLConnect(server,port, 10)
  if rc1 <> 0 then
    bsocket.debug "connect error " & rc1
    WScript.quit
  end if
  ' CONNECTコマンド送信
  cmd = "CONNECT " & host & ":443 HTTP/1.0" & vbCrLf
  rc1 = bsocket.write (cmd & vbCrLf)
  if rc1 <> 0 then
    bsocket.debug "write error " & rc1
    WScript.quit
  end if
  bsocket.debug "CONNECT command done."
  bsocket.readline datas
  bsocket.debug datas
  While rc1 = 0 And Len(datas) > 0  ' ヘッダーを読み飛ばす
    rc1 = bsocket.readline(datas)
    bsocket.debug datas
  Wend
else   ' プロクシなし
  rc1 = bsocket.SSLConnect(server,port, 10)
  if rc1 <> 0 then
    bsocket.debug "connect error " & rc1
    WScript.quit
  end if
end if
' SSL ハンドシェーク
rc1 = bsocket.SSLHandSHake()
if rc1 <> 0 then
  bsocket.debug "SSL HandShake Error " & rc1
  WScript.quit
end if
bsocket.debug "HandShake done."
cmd = "GET " & path & " HTTP/1.0"
host = "Host: " & host & vbCrLf
rc1 = bsocket.write (cmd & vbCrLf & host & vbCrLf)
if rc1 <> 0 then
  bsocket.debug "write error " & rc1
  WScript.quit
end if
bsocket.readline datas
bsocket.debug datas
While rc1 = 0 And Len(datas) > 0  ' ヘッダーを読み飛ばす
    rc1 = bsocket.readline(datas)
    bsocket.debug datas
Wend
rc1 = bsocket.read(datax, 1)      ' イメージをバイナリ読込み
mode = 0: lenx = 0
While rc1 = 0 And IsArray(datax)    'ファイルに書込みます
  lenx = lenx + UBound(datax) + 1
  rc1 = bsocket.BinaryWrite(datax, "c:\temp\good.jpg", mode)
  mode = mode + 1
  rc1 = bsocket.read(datax, 1)
Wend
bsocket.debug "Done. " & lenx

■ HTTP SSLダウンロード (C#)
SSLでWebサーバに接続して対応ファイルをダウンロードします。 IEのプロクシ情報を使用します。
// download.cs
// csc /R:BSOCKETLib.dll download.cs
// 使用方法: download.exe url,filepath
using System;
class MainClass { 
public static void Main(string[] args) { 
  // url,path
  if (args.Length != 2) { 
    DisplayUsage();
    return;
  } 
  if (args[0] == "/?") { 
    DisplayUsage();
    return;
  } 
 
  string url = args[0]; 
  string filename = args[1];
  int https = 0;
  int wlen = 0;
  Console.WriteLine(url); 
  Console.WriteLine(filename); 
  if (url.Substring(0,7) != "http://" && url.Substring(0,8) != "https://") {
    DisplayUsage();
    return;
  } 
  if (url.Substring(0,8) == "https://") {
    https = 1;
  }
  string server = url.Substring(7+https);
  int i = server.IndexOf("/",0);
  string path = "";
  if (i != -1) {
    path = server.Substring(i+1);
    server = server.Substring(0,i);
  }  
  try {
    BSOCKETLib.Imain bsocket = new BSOCKETLib.main();
    string proxy;
    int port;
    if (https == 1) {
      port = 443;
      proxy = bsocket.GetProxy("https");
    } else {
      port = 80;
      proxy = bsocket.GetProxy("http");
    }
    string host = server;
    int rc;
    string crlf = "\r\n";
    int timeout = 10;
    object datas;
    string cmd,line;
    Console.WriteLine(server); 
    Console.WriteLine(path); 
    if (proxy != "") { // プロクシあり?
      int pos = proxy.IndexOf(":");
      server = proxy.Substring(0,pos);  // プロクシサーバ名
      port = int.Parse(proxy.Substring(pos+1)); // プロクシポート番号
      if (https == 1) { 
        rc = bsocket.SSLConnect(server,port, timeout);
        if (rc != 0) {
          Console.WriteLine("SSLConnect error " + server + " " + rc.ToString()); 
          return;
        }
        // CONNECTコマンド送信
        cmd = "CONNECT " + host + ":443 HTTP/1.0" + crlf;
        rc = bsocket.Write(cmd + crlf);
        if (rc != 0) {
          Console.WriteLine("Write error " + rc.ToString()); 
          return;
        }
        datas = bsocket.ReadLine2();
        line = datas as string;  // キャスト
        while (bsocket.Result == 0 && line.Length > 0) { //ヘッダーを読み飛ばす
          datas = bsocket.ReadLine2();
          line = datas as string;  // キャスト
        }
      } else { // http
        rc = bsocket.Connect(server,port,timeout);
        if (rc != 0) {
          Console.WriteLine("Connect error " + server + " " + rc.ToString()); 
          return;
        }
      }
    } else {  // プロクシなし
      int pos = server.IndexOf(":");
      port = int.Parse(server.Substring(pos+1)); // ポート番号
      server = server.Substring(0,pos);  // サーバ名
      if (https == 1) {
        rc = bsocket.SSLConnect(server,port,timeout);
        if (rc != 0) {
          Console.WriteLine("SSLConnect error " + server + " " + rc.ToString()); 
          return;
        }
      } else {
        rc = bsocket.Connect(server,port,timeout);
        if (rc != 0) {
          Console.WriteLine("Connect error "  + server + " "+ rc.ToString()); 
          return;
        }
      }
    }
    if (https == 1) {
      // SSL ハンドシェーク
      rc = bsocket.SSLHandshake("");
      if (rc != 0) {
        Console.WriteLine("SSLHandShake error " + rc.ToString()); 
        return;
      }
      Console.WriteLine("HandShake done.");
    }
    cmd = "GET /" + path + " HTTP/1.0";
    host = "Host: " + host + crlf;
    rc = bsocket.Write(cmd + crlf + host + crlf);
    if (rc != 0) {
      Console.WriteLine("Write error " + rc.ToString()); 
      return;
    }
    datas = bsocket.ReadLine2();
    line = datas as string;
    Console.WriteLine(datas);
    while (bsocket.Result == 0 && line.Length > 0) { //ヘッダーを読み飛ばす
      datas = bsocket.ReadLine2();
      Console.WriteLine(datas);
      line = datas as string;
    }
    object datax;
    datax = bsocket.Read2(1);  // ボディをバイナリ読込み
    int mode = 0;
    while (bsocket.Result == 0 && datax is Array) {  // Arrayデータ ?
      rc = bsocket.BinaryWrite(datax,filename, mode);  //ファイルに書込み
      mode = mode + 1;
      wlen += ((Array)datax).Length;  // 書込みバイト数 Arrayにキャスト
      datax = bsocket.Read2(1);
    }
  }
  catch(Exception ex) {
    Console.WriteLine("Unexpected COM exception: " + ex.Message);
  }
  // finish
  Console.WriteLine("Done. Length=" + wlen.ToString()); 
}
private static void DisplayUsage() { 
  Console.WriteLine("Download."); 
  Console.WriteLine("Usage: download.exe url,filename"); 
  Console.WriteLine("where url is http:// or https://"); 
  Console.WriteLine("where filename is full path"); 
}
}



[ホーム] [会社概要] [製品] [サポート]
[BASP21 Pro] [FAQ] [アプリケーションガイド] [ユーザガイド] [リファレンス]
[FTP オブジェクト] [ソケット オブジェクト]

Copyright © 2002-2010 B21Soft, Inc. All Rights Reserved.