文書番号: 175474 - 最終更新日: 2005年8月18日 - リビジョン: 1.3

ポスティングの HTML フォーム エンコード済みのデータを ASP ページに必要な情報: ヘッダー

目次

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

概要

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

WinInet API またはインターネット トランスファー コントロール (SP2) を使用して、POST 要求へのカスタム HTTP ヘッダーの追加を次の Visual Basic 例に示します。 必要がある注意してくださいことから、インターネット トランスファー コントロール少なくとも Visual Basic 5. 0 Service Pack 2 または Visual Studio Service Pack 2 は、POST を実装します。 元のコントロールは、バグのため正しくポストできません。 次の例では CommandButton1 というクリックしてイベントにコードは WinInet API を使用します。 CommandButton2 のクリックしてイベントにコードは、インターネット トランスファー コントロール (SP2) 使用します。

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

  1. 新しい標準 EXE プロジェクトを開始します。 デフォルトで Form1 が追加されます。
  2. プロジェクト] メニューのコンポーネント] をクリックし、インターネットを選択するプロジェクトに Control(SP2) を転送します。
  3. インターネットの転送を配置する 5.0(SP2)、Inet1、Form1 上を制御します。
  4. 2 つのコマンド ボタン Command1、Command2、Form1 に配置します。
  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 </a0> を使用します。
  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 Internet Explorer 4.0 128 ビット版
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Microsoft ActiveX SDK
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
キーワード:?
kbmt kbcode kbinfo 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、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"
 

サポート技術情報の翻訳

 

Related Support Centers