HTTPサーバーの情報を取得          <TOP>


InternetOpen インターネットのハンドルを作成

InternetConnect インターネット上のサーバーに接続し、ハンドルを返す

HttpOpenRequest HTTPリクエストの作成

HttpSendRequest 指定されたHTTPリクエストをサーバーへ送信

HttpQueryInfo HTTPリクエストに関する情報を取得

InternetCloseHandle Win32インターネット関数のハンドルをクローズ

 

 

'================================================================
'= HTTPサーバーの情報を取得
'=    (HttpSendRequest.bas)
'================================================================
#include "Windows.bi"

' インターネットのハンドルの作成
Declare Function Api_InternetOpen& Lib "wininet" Alias "InternetOpenA" (ByVal sAgent$, ByVal lAccessType&, ByVal sProxyName$, ByVal sProxyBypass$, ByVal lFlags&)

' インターネット上のサーバに接続し、ハンドルを返す
Declare Function Api_InternetConnect& Lib "wininet" Alias "InternetConnectA" (ByVal hSession&, ByVal sServerName$, ByVal nServerPort&, ByVal sUsername$, ByVal sPassword$, ByVal lService&, ByVal lFlags&, ByVal lContext&)

' HTTPリクエストの作成
Declare Function Api_HttpOpenRequest& Lib "wininet" Alias "HttpOpenRequestA" (ByVal hHttpSession&, ByVal sVerb$, ByVal sObjectName$, ByVal sVersion$, ByVal sReferer$, ByVal something&, ByVal lFlags&, ByVal lContext&)

' 指定されたHTTPリクエストをサーバへ送信
Declare Function Api_HttpSendRequest& Lib "wininet" Alias "HttpSendRequestA" (ByVal HttpRequest&, ByVal sHeaders$, ByVal lHeadersLength&, sOptional As Any, ByVal lOptionalLength&)

' HTTPリクエストに関連する情報の取得
Declare Function Api_HttpQueryInfo& Lib "wininet" Alias "HttpQueryInfoA" (ByVal HttpRequest&, ByVal lInfoLevel&, ByRef Buffer As Any, ByRef BufferLen&, ByRef lIndex&)

' Win32インターネット関数のハンドルのクローズ
Declare Function Api_InternetCloseHandle% Lib "wininet" Alias "InternetCloseHandle" (ByVal hInet&)

#define INTERNET_OPEN_TYPE_PRECONFIG 0   'IEの設定に従い接続
#define INTERNET_SERVICE_HTTP 3          'HTTP・HTTPSを指定
#define INTERNET_FLAG_RELOAD -2147483648 'ローカルのキャッシュを無視し、常にサーバからデータを取得
#define INTERNET_DEFAULT_HTTP_PORT 80    'RFCで既定されたhttpポート
#define HTTP_QUERY_CONTENT_TYPE 1        'リソースのタイプ
#define HTTP_QUERY_VERSION 18            'サーバに最後に返された応答コード
#define HTTP_QUERY_SERVER 37             '
#define HTTP_QUERY_TITLE 38              '

Var Shared Text(4) As Object
Var Shared Edit1 As Object
Var Shared Button1 As Object

For i = 0 To 4
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
Next
Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hInet As Long
    Var hConnect As Long
    Var hRequest As Long
    Var Ret As Long
    Var Buffer As String * 1024

    '初期化
    hInet = Api_InternetOpen("", INTERNET_OPEN_TYPE_PRECONFIG, ByVal 0, ByVal 0, 0)

    If hInet <> 0 Then
        'HTTPサービスに接続
        hConnect = Api_InternetConnect(hInet, Edit1.GetWindowText, INTERNET_DEFAULT_HTTP_PORT, ByVal 0, ByVal 0, INTERNET_SERVICE_HTTP, 0, 0)

        If hConnect <> 0 Then
            'HTTPリクエストのハンドルを開く
            hRequest = Api_HttpOpenRequest(hConnect, "GET", ByVal 0, ByVal 0, ByVal 0, 0, INTERNET_FLAG_RELOAD, 0)

            If hRequest <> 0 Then
                'HTTPサーバーにリクエストを送信
                Ret = Api_HttpSendRequest(hRequest, ByVal 0, 0, ByVal 0, 0)

                If Ret Then
                    'HTTPサーバーの種類をリクエスト
                    If Api_HttpQueryInfo(hRequest, HTTP_QUERY_SERVER, Buffer, Len(Buffer), 0) <> 0 Then
                        Text(3).SetWindowtext Buffer
                    End If

                    'HTTPのバージョンをリクエスト
                    If Api_HttpQueryInfo(hRequest, HTTP_QUERY_VERSION, Buffer, Len(Buffer), 0) <> 0 Then
                        Text(4).SetWindowText Buffer
                    End If
                End If
            End If
        End If
    End If

    ' ハンドルを閉じる
    If hInet <> 0 Then
        Ret = Api_InternetCloseHandle(hInet)
    End If

    If hConnect <> 0 Then
        Ret = Api_InternetCloseHandle(hConnect)
    End If

    If hRequest <> 0 Then
        Ret = Api_InternetCloseHandle(hRequest)
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub Edit1_SetFocus edecl ()
Sub Edit1_SetFocus()
    Text(3).SetWindowText ""
    Text(4).SetWindowtext ""
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End