Discuz!NT
欢迎 游客 , 注册 | 登录 | 会员 | 界面 | 简洁版本 | 在线 | 帮助
商都网教育宝典宝库

发表新主题 回复该主题
本主题被查看581次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第   上一主题   下一主题
标题: vb调用winInetAPI接口post数据到指定的url
-[尕硴]
超级版主
UID: 71
来自:
精华: 130
积分: 14003
帖子: 12909
注册: 2007-10-22 17:59:00
状态: 离线
威望: 444.00
金钱: 3355.00 元
只看楼主 2008-01-28 14:49
vb调用winInetAPI接口post数据到指定的url
『vb调用winInet API接口post数据到指定的url』

  ´This module is called modWinInet.bas. Use the SplitAddr() function to get the address in the correct format for PostInfo.

  Option Explicit

  ´Author:    Sam Huggill
  ´Email:    sam@vbsquare.com

  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


Public Function PostInfo$(srv$, port$, script$, postdat$)

  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, _
                        srv$, _
                        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", _
                          script$, _
                          "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 = postdat$
          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
          PostInfo = sBuffer
          bRet = InternetCloseHandle(hHttpOpenRequest)
        End If
        bRet = InternetCloseHandle(hInternetConnect)
    End If
    bRet = InternetCloseHandle(hInternetOpen)
  End If
End Function

Public Sub SplitAddr(ByVal addr$, srv$, script$)
´Inputs: The full url including http://
´ Two variables that will be changed
´
´Returns: Splits the addr$ var into the server name
´ and the script path

  Dim i%

  i = InStr(addr$, "/")
  srv$ = Mid(addr$, i + 2, Len(addr$) - (i + 1))
  i = InStr(srv$, "/")
  script$ = Mid(srv$, i, Len(srv$) + 1 - i)
  srv$ = Left$(srv$, i - 1)

End Sub
#1  
发表新主题 回复该主题
本主题被查看581次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第







现在的时间是 2008-08-30 07:58:45

版权所有 商都网教育宝典
         Powered by Discuz!NT 1.0.6666    Copyright © 2001-2008 Comsenz Inc.
Processed in 0.06 seconds