文書番号: 175474 - 最終更新日: 2011年7月5日 - リビジョン: 3.0

ヘッダー情報: ポスティングの HTML フォーム エンコードされたデータを ASP ページに要求します。

お知らせお使いのオペレーティング システムには適用しない情報が含まれている場合があります。

目次

すべて展開する | すべて折りたたむ

概要

HTML のフォーム データをポストバックするインターネット クライアント アプリケーションを記述する場合は、Wininet API または Visual Basic のインターネット転送コントロールを使用して ASP ページは投稿では、次の HTTP ヘッダーを追加するのには、必要に応じて要求します。
Content-Type: application/x-www-form-urlencoded
				
このヘッダーがポストされるデータに基づいてエンコードされていることを示しますHTML の仕様 (RFC 1866) 内のルール。ASP を取得されませんが、このヘッダーは、POST 要求に存在しない場合の HTML フォームの変数。

Visual Basic の例を次に示します、カスタム HTTP ヘッダーを追加する方法を示しますPOST 要求は Wininet API またはインターネット転送コントロールを使用するには(SP2)。インターネット転送コントロールの必要があることに注意してください。最小の Visual Basic 5.0 Service Pack 2 または Visual Studio サービス パック 2ポストを実装します。元のコントロールが正しく、バグをポストできません。Commandbutton1 というイベントには、次のコード フラグメント例は、Wininet API を使用します。コードで、CommandButton2 がクリックしてインターネット トランスファー コントロール (SP2) のイベントを使用します。

ステップ バイ ステップの例

  1. 新規の標準 EXE プロジェクトを起動します。デフォルトで、Form1 が追加されます。
  2. [プロジェクト] メニューの [コンポーネント] をポイントし、インターネットを選択します。Control(SP2) プロジェクトに転送します。
  3. インターネットの転送を配置します。 5.0(SP2)、Inet1、Form1 上のコントロール。
  4. Form1 に 2 つのコマンド ボタン、Command1 と Command2 を置きます。
  5. プロジェクトのコード ウィンドウに次のコードを追加します。
          Private Declare Function InternetOpen Lib "wininet.dll" _
             Alias "InternetOpenA" _
                (ByVal lpszCallerName As String, _
                 ByVal dwAccessType As Long, _
                 ByVal lpszProxyName As String, _
                 ByVal lpszProxyBypass As String, _
                 ByVal dwFlags As Long) As Long
    
          Private Declare Function InternetConnect Lib "wininet.dll" _
                Alias "InternetConnectA" _
                (ByVal hInternetSession As Long, _
                 ByVal lpszServerName As String, _
                 ByVal nProxyPort As Integer, _
                 ByVal lpszUsername As String, _
                 ByVal lpszPassword As String, _
                 ByVal dwService As Long, _
                 ByVal dwFlags As Long, _
                 ByVal dwContext As Long) As Long
    
       Private Declare Function InternetReadFile Lib "wininet.dll" _
                (ByVal hFile As Long, _
                 ByVal sBuffer As String, _
                 ByVal lNumBytesToRead As Long, _
                 lNumberOfBytesRead As Long) As Integer
    
       Private Declare Function HttpOpenRequest Lib "wininet.dll" _
                Alias "HttpOpenRequestA" _
                (ByVal hInternetSession As Long, _
                 ByVal lpszVerb As String, _
                 ByVal lpszObjectName As String, _
                 ByVal lpszVersion As String, _
                 ByVal lpszReferer As String, _
                 ByVal lpszAcceptTypes As Long, _
                 ByVal dwFlags As Long, _
                 ByVal dwContext As Long) As Long
    
       Private Declare Function HttpSendRequest Lib "wininet.dll" _
                Alias "HttpSendRequestA" _
                (ByVal hHttpRequest As Long, _
                 ByVal sHeaders As String, _
                 ByVal lHeadersLength As Long, _
                 ByVal sOptional As String, _
                 ByVal lOptionalLength As Long) As Boolean
    
       Private Declare Function InternetCloseHandle Lib "wininet.dll" _
                (ByVal hInternetHandle As Long) As Boolean
    
       Private Declare Function HttpAddRequestHeaders Lib "wininet.dll" _
                 Alias "HttpAddRequestHeadersA" _
                 (ByVal hHttpRequest As Long, _
                 ByVal sHeaders As String, _
                 ByVal lHeadersLength As Long, _
                 ByVal lModifiers As Long) As Integer
    
       Private Sub Command1_Click()
                Dim hInternetOpen As Long
                Dim hInternetConnect As Long
                Dim hHttpOpenRequest As Long
                Dim bRet As Boolean
    
                hInternetOpen = 0
                hInternetConnect = 0
                hHttpOpenRequest = 0
    
                'Use registry access settings.
                Const INTERNET_OPEN_TYPE_PRECONFIG = 0
                hInternetOpen = InternetOpen("http generic", _
                                INTERNET_OPEN_TYPE_PRECONFIG, _
                                vbNullString, _
                                vbNullString, _
                                0)
    
                If hInternetOpen <> 0 Then
                   'Type of service to access.
                   Const INTERNET_SERVICE_HTTP = 3
                   Const INTERNET_DEFAULT_HTTP_PORT = 80
                   'Change the server to your server name
                   hInternetConnect = InternetConnect(hInternetOpen, _
                                      "yourserver", _
                                      INTERNET_DEFAULT_HTTP_PORT, _
                                      vbNullString, _
                                      "HTTP/1.0", _
                                      INTERNET_SERVICE_HTTP, _
                                      0, _
                                      0)
    
                   If hInternetConnect <> 0 Then
                    'Brings the data across the wire even if it locally cached.
                     Const INTERNET_FLAG_RELOAD = &H80000000
                     hHttpOpenRequest = HttpOpenRequest(hInternetConnect, _
                                         "POST", _
                                         "/scripts/testpost.asp", _
                                         "HTTP/1.0", _
                                         vbNullString, _
                                         0, _
                                         INTERNET_FLAG_RELOAD, _
                                         0)
    
                      If hHttpOpenRequest <> 0 Then
                         Dim sHeader As String
                         Const HTTP_ADDREQ_FLAG_ADD = &H20000000
                         Const HTTP_ADDREQ_FLAG_REPLACE = &H80000000
               sHeader = "Content-Type: application/x-www-form-urlencoded" _
                           & vbCrLf
                         bRet = HttpAddRequestHeaders(hHttpOpenRequest, _
                           sHeader, Len(sHeader), HTTP_ADDREQ_FLAG_REPLACE _
                           Or HTTP_ADDREQ_FLAG_ADD)
    
                         Dim lpszPostData As String
                         Dim lPostDataLen As Long
    
                         lpszPostData = "lname=Doe&fname=John"
                         lPostDataLen = Len(lpszPostData)
                         bRet = HttpSendRequest(hHttpOpenRequest, _
                                vbNullString, _
                                0, _
                                lpszPostData, _
                                lPostDataLen)
    
                         Dim bDoLoop             As Boolean
                         Dim sReadBuffer         As String * 2048
                         Dim lNumberOfBytesRead  As Long
                         Dim sBuffer             As String
                         bDoLoop = True
                         While bDoLoop
                          sReadBuffer = vbNullString
                          bDoLoop = InternetReadFile(hHttpOpenRequest, _
                             sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
                          sBuffer = sBuffer & _
                               Left(sReadBuffer, lNumberOfBytesRead)
                          If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
                         Wend
                         MsgBox sBuffer
                         bRet = InternetCloseHandle(hHttpOpenRequest)
                      End If
                      bRet = InternetCloseHandle(hInternetConnect)
                   End If
                   bRet = InternetCloseHandle(hInternetOpen)
                End If
    
       End Sub
    
       Private Sub Command2_Click()
             Dim strURL As String, strFormData As String
             'Change the server to your server name
             strURL = "http://yourserver/scripts/testpost.asp"
             strFormData = "lname=Doe&fname=John"
             Inet1.Execute strURL, "Post", strFormData, _
                "Content-Type: application/x-www-form-urlencoded"
       End Sub
    
       Private Sub Inet1_StateChanged(ByVal State As Integer)
           Dim vtData As Variant ' Data variable.
    
           Select Case State
           ' ... Other cases not shown.
           Case icError ' 11
               ' In case of error, return ResponseCode and
       ' ResponseInfo.
               vtData = Inet1.ResponseCode & ":" & _
               Inet1.ResponseInfo
    
           Case icResponseCompleted  ' 12
               Dim strData As String: strData = ""
               Dim bDone As Boolean: bDone = False
    
               ' Get first chunk.
               vtData = Inet1.GetChunk(1024, icString)
               DoEvents
    
               Do While Not bDone
    
                   strData = strData & vtData
                   ' Get next chunk.
                   vtData = Inet1.GetChunk(1024, icString)
                   DoEvents
    
                   If Len(vtData) = 0 Then
                       bDone = True
                   End If
               Loop
    
              MsgBox strData
           End Select
       End Sub
    
       Private Sub Form_Load()
           Inet1.Cancel
       End Sub
    						
  6. Project1.exe の作成、プロジェクトをコンパイルするのには、[ファイル] メニューを選択します。

    その Inet1_StateChanged イベントのコールバック関数のトレースに注意してください、このコールバック関数を必要とするので VB のデバッガーは正しく動作しません繰り返されると呼ばれるが完了する前にデバッガー内で実行を停止することはできませんHTTP 応答が受信されます。場合は、Inet1_StateChanged をトレースする必要があります。Debug.Print のデバッガーのイベントのコールバック関数を使用してください。
  7. Testpost.asp ファイルを作成し、Web サーバーのスクリプトに配置ディレクトリ:
          <HTML>
          <HEAD>
          <TITLE>test asp</TITLE>
          </HEAD>
          <BODY BGCOLOR=#FFFFFF>
          <H3>test asp</H3>
          fname is
          <% =Request("fname") %>
          <BR>
          lname is
          <% =Request("lname") %>
          </BODY>
          </HTML>
    						

関連情報

RFC 1866 - ハイパー テキスト ・ マークアップ言語 - 2.0 の。
http://www.rfc-editor.org/rfc/rfc1866.txt (http://www.rfc-editor.org/rfc/rfc1866.txt)
セクション 8.2、「フォームの送信]

この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
キーワード:?
kbcode kbinfo kbmt KB175474 KbMtja
機械翻訳機械翻訳
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:175474? (http://support.microsoft.com/kb/175474/en-us/ )
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"