|

|
|
 |
2.HTTPやFTPサーバへ接続するには |
 |
|
|
|
|
|
HTTPやFTPサーバへ接続するときは、API関数/InternetOpenでインターネットサービスをオープンした後、API関数/InternetConnectを使って行います。切断するときは切断するときはInternetCloseHandleを使います。
参考までに、Access VBA以外に、Excelマクロなど他のVBAでも使用することができます。
|
|
|
|
|
|
| API関数/InternetConnectを定義する |
|
|
|
|
API関数を使うとき、まずはこの関数がどこにある・どんな関数であるかといった、この関数を使うための準備(API関数の宣言)が必要です。また、定義する場所はフォーム、モジュール、クラスモジュールの(General)(Declarations)です。
次の例は、API関数/InternetConnectを使うときの記述例です。API関数を使用するときは、ついでにAPI関数で使用する定数も定義しておきましょう。
'(General)(Declarations)へ記述します
Private Declare Function InternetConnect _
Lib "wininet.dll" _
Alias "InternetConnectA" _
(ByVal hInternet As Long _
, ByVal lpszServerName As String _
, ByVal nServerPort As Integer _
, ByVal lpszUsername As String _
, ByVal lpszPassword As String _
, ByVal dwService As Long _
, ByVal dwFlags As Long _
, ByVal dwContext As Long) As Long
'nServerPort(接続ポート)
'FTP
Private Const INTERNET_DEFAULT_FTP_PORT As Integer = 21
'GOPHER
Private Const INTERNET_DEFAULT_GOPHER_PORT As Integer = 70
'HTTP
Private Const INTERNET_DEFAULT_HTTP_PORT As Integer = 80
'HTTPS
Private Const INTERNET_DEFAULT_HTTPS_PORT As Integer = 443
'SOCK
Private Const INTERNET_DEFAULT_SOCKS_PORT As Integer = 1080
'dwService(サービスの種類)
'FTP
Private Const INTERNET_SERVICE_FTP As Long = 1
'GOPHER
Private Const INTERNET_SERVICE_GOPHER As Long = 2
'HTTP
Private Const INTERNET_SERVICE_HTTP As Long = 3
'dwFlags(オプション)
'PASSIVEモードで接続(FTP時)
Private Const INTERNET_FLAG_PASSIVE = &H8000000
|
※決まり事なので、悩まずにコピペして使ってしまいましょう
なお、この関数の戻り値にはサーバを使用するための管理番号(コネクションハンドル)が返ります。( )内に記述している引数は、以下を参照してください。
◆InternetConnectの引数
| ByVal hInternet As Long |
InternetOpenで取得したインターネットハンドルを指定します。
|
| ByVal lpszServerName As String |
接続するサーバのIPアドレス、またはドメイン名を指定します。
|
| ByVal nServerPort As Integer |
接続するサーバのポート番号を指定します。通常は、HTTPサービスを使用するならINTERNET_DEFAULT_HTTP_PORT、FTPサービスを使用するならINTERNET_DEFAULT_FTP_PORTを指定すればOK。
|
| ByVal lpszUsername As String |
FTPサービスを使用するときは、ここへログインユーザIDを指定します。
|
| ByVal lpszPassword As String |
FTPサービスを使用するときは、ここへログインパスワードを指定します。
|
| ByVal dwService As Long |
使用するサービスの種類を指定します。HTTPを使うならINTERNET_SERVICE_HTTP、FTPサービスを使うならINTERNET_SERVICE_FTPです。
|
| ByVal dwFlags As Long |
FTPサービスで、PASSIVEモードを使用するときはINTERNET_FLAG_PASSIVE、使用しないときは0を指定します。なお、HTTPサービスを使用するときは0を指定します。
|
| ByVal dwContext As Long |
0を指定しておいてOKです。
|
|
|
|
|
|
|
| InternetConnectの使用例/FTPサーバへ接続する |
|
|
|
|
InternetConnectを使って、FTPサーバへ接続する例です。Subプロシージャ「prcFTPConnectSample」を実行すると、FTPサーバへの接続と切断を行います。
FTPサーバへ接続するには、最初にInternetOpenを実行しインターネットサービスのオープンを行います。オープンに成功し、インターネットハンドル(例ではlngWinINetへ保存)を取得したら、このインターネットハンドルを使ってInternetConnectを実行しFTPサーバへ接続ます。なお、FTPサーバへ接続するときは、サーバ名に加えてユーザIDとパスワードの指定が必要です。
例では、Functionプロシージャ「fcFTPConnect」で、渡された引数の内容を使い(Serverが"ftp.happy-happy-island.net"、Userが"happy"、Pswが"island"、ただし全て架空)FTPサーバに接続。FTPサーバへ接続したときに取得できるコネクションハンドルは、グローバル変数lngFtpHndへ保存し各プロシージャ間で共有できるようにしています。
次に、FTPサーバから切断する処理です。切断するときは、切断するハンドルを指定しInternetCloseHandleを実行します。例では、Functionプロシージャ「fcFTPDisConnect」でFTPサーバからの切断を実行、指定しているハンドルは接続のときに取得したFTPコネクションハンドル(例ではlngFtpHnd)です。
なお、APIを実行したときの結果コードはErr.LastDllErrorに返ります。0なら正常終了、0以外は失敗です。
'変数の定義 ※(General)(Declarations)です
Private lngWinINet As Long 'インターネットハンドルの保存用
Private lngFtpHnd As Long 'FTPハンドルの保存用
Sub prcFTPConnectSample()
Dim lngRC As Long
'インターネットサービスをオープンします
lngRC = fcInternetOpen
'オープンに成功したらFTPサーバとの接続と切断を行います
If lngRC = 0 Then
'FTPサーバへ接続します
Call fcFTPConnect("ftp.happy-happy-island.net", "happy", "island")
'FTPサーバから切断します
Call fcFTPDisConnect
End If
'インターネットサービスをクローズします
Call fcInternetClose
End Sub
Function fcFTPConnect(Server As String, User As String, Psw As String) As Long
'APIの実行/FTPサーバへ接続
lngFtpHnd = InternetConnect(lngWinINet _
, Server _
, INTERNET_DEFAULT_FTP_PORT _
, User _
, Psw _
, INTERNET_SERVICE_FTP _
, 0 _
, 0)
'この関数の戻り値には、APIの処理結果コードを返します
fcFTPConnect = Err.LastDllError
End Function
Function fcFTPDisConnect() As Long
'APIの実行/FTPサーバから切断
Call InternetCloseHandle(lngFtpHnd)
'この関数の戻り値には、APIの処理結果コードを返します
fcFTPDisConnect = Err.LastDllError
End Function
Function fcInternetOpen() As Long
'APIの実行/インターネットサービスをオープン
lngWinINet = InternetOpen(vbNullString _
, INTERNET_OPEN_TYPE_PRECONFIG _
, vbNullString _
, vbNullString _
, INTERNET_FLAG_ASYNC)
'この関数の戻り値には、APIの処理結果コードを返します
fcInternetOpen = Err.LastDllError
End Function
Function fcInternetClose() As Long
'APIの実行/インターネットサービスをクローズ
Call InternetCloseHandle(lngWinINet)
'この関数の戻り値には、APIの処理結果コードを返します
fcInternetClose = Err.LastDllError
End Function
|
※この他に、API関数を定義する必要があります。
※ftp.happy-happy-island.netは架空のドメイン名です。
|
|
|
|
|
|
| InternetConnectの使用例/HTTPサーバへ接続する |
|
|
|
|
InternetConnectを使って、HTTPサーバへ接続する例です。Subプロシージャ「prcHTTPConnectSample」を実行すると、HTTPサーバへの接続と切断を行います。
HTTPサーバへ接続するときも、FTPサーバへ接続するときとほとんど同じです。最初にInternetOpenを実行しインターネットサービスのオープンを行います。オープンに成功し、インターネットハンドル(例ではlngWinINetへ保存)を取得したら、このインターネットハンドルを使ってInternetConnectを実行しHTTPサーバへ接続ます。なお、HTTPサーバへ接続するときに指定するのはサーバ名のみです。
例では、Functionプロシージャ「fcHTTPConnect」で、渡された引数の内容を使い(Serverへ"www.happy-happy-island.net"、ただし全て架空)HTTPサーバに接続。HTTPサーバへ接続したときに取得できるコネクションハンドルは、グローバル変数lngHTTPHndへ保存し各プロシージャ間で共有できるようにしています。
次に、HTTPサーバから切断する処理です。FTPサーバから切断するときと同じように、切断するハンドルを指定しInternetCloseHandleを実行します。例では、Functionプロシージャ「fcHTTPDisConnect」でHTTPサーバからの切断を実行、指定しているハンドルは接続のときに取得したHTTPコネクションハンドル(例ではlngHttpHnd)です。
なお、APIを実行したときの結果コードはErr.LastDllErrorに返ります。0なら正常終了、0以外は失敗です。
'変数の定義 ※(General)(Declarations)です
Private lngWinINet As Long 'インターネットハンドルの保存用
Private lngHttpHnd As Long 'HTTPハンドルの保存用
Sub prcHTTPConnectSample()
Dim lngRC As Long
'インターネットサービスをオープンします
lngRC = fcInternetOpen
'オープンに成功したらHTTPサーバとの接続と切断を行います
If lngRC = 0 Then
'HTTPサーバへ接続します
Call fcHTTPConnect("www.happy-happy-island.net")
'HTTPサーバから切断します
Call fcHTTPDisConnect
End If
'インターネットサービスをクローズします
Call fcInternetClose
End Sub
Function fcHTTPConnect(Server As String) As Long
'APIの実行/HTTPサーバへ接続
lngHTTPHnd = InternetConnect(lngWinINet _
, Server _
, INTERNET_DEFAULT_HTTP_PORT _
, vbNullString _
, vbNullString _
, INTERNET_SERVICE_HTTP _
, 0 _
, 0)
'この関数の戻り値には、APIの処理結果コードを返します
fcHTTPConnect = Err.LastDllError
End Function
Function fcHTTPDisConnect() As Long
'APIの実行/HTTPサーバから切断
Call InternetCloseHandle(lngHTTPHnd)
'この関数の戻り値には、APIの処理結果コードを返します
fcHTTPDisConnect = Err.LastDllError
End Function
Function fcInternetOpen() As Long
'APIの実行/インターネットサービスをオープン
lngWinINet = InternetOpen(vbNullString _
, INTERNET_OPEN_TYPE_PRECONFIG _
, vbNullString _
, vbNullString _
, 0)
'この関数の戻り値には、APIの処理結果コードを返します
fcInternetOpen = Err.LastDllError
End Function
Function fcInternetClose() As Long
'APIの実行/インターネットサービスをクローズ
Call InternetCloseHandle(lngWinINet)
'この関数の戻り値には、APIの処理結果コードを返します
fcInternetClose = Err.LastDllError
End Function
|
※この他に、API関数を定義する必要があります。
※www.happy-happy-island.netは架空のドメイン名です。
|
|
|
|
|