利用wininet.dll相关API post/get数据

Eddy 发布于2010-8-27 22:47:31 分类: 程序设计 已浏览loading 网友评论1条 我要评论

核心代码:

 

Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0

Private Const INTERNET_OPEN_TYPE_PROXY = 3

Private Const INTERNET_INVALID_PORT_NUMBER = 0

Private Const INTERNET_SERVICE_HTTP = 3

Private Const INTERNET_FLAG_KEEP_CONNECTION = &H400000

Private Const RESPONSE_LENGTH = 1024

 

'Initializes an application's use of the Win32 Internet functions.

Private Declare Function InternetOpen Lib "wininet.dll" Alias _

   "InternetOpenA" (ByVal sAgent As String, _

   ByVal lAccessType As Long, ByVal sProxyName As String, _

   ByVal sProxyBypass As String, ByVal lFlags 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 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 Integer

 

Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" _

      (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, _

     ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Long, _

    ByVal lFlags As Long, ByVal lContext As Long) As Long

 

Private Declare Function HttpOpenRequest Lib "wininet.dll" Alias "HttpOpenRequestA" _

    (ByVal hHttpSession As Long, ByVal sVerb As String, ByVal sObjectName As String, ByVal sVersion As String, _

    ByVal sReferer As String, ByVal something As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long

 

Private Declare Function InternetCloseHandle Lib "wininet.dll" _

   (ByVal hInet As Long) As Integer

 

 

Private Sub cmdConnect_Click()

Dim lCount As Long, lctr As Long

Dim bAns As Boolean

Screen.MousePointer = vbHourglass

lCount = txtName.UBound

Set pDictValues = New Scripting.Dictionary

 

If Connect(txtServer.Text) Then

    For lctr = 0 To lCount

        If Trim(txtName(lctr).Text) <> "" And Trim(txtValue(lctr).Text) <> "" Then

            pDictValues.Add txtName(lctr).Text, txtValue(lctr).Text

        End If

    Next

    bAns = PostRequest(txtScript.Text)

    If Not bAns Then

        MsgBox "Failed to post response to html or script page", vbCritical, "Check Your Values"

    End If

Else

    MsgBox "Failed to connect to server", vbCritical, "Check Your Values"

End If

Disconnect

Screen.MousePointer = vbDefault

End Sub

 

Public Function PostRequest(ScriptName As String) As Boolean

Dim lRequest As Long

Dim sData As String

Dim sAns As String

Dim lRead As Long

Dim sResult As String

Dim lctr As Long

Dim sHeader As String

Dim lLen As Long

Dim sRequestType As String

Dim sUrl As String

If pDictValues.Count > 0 Then

    sRequestType = IIf(optRequestType(0).Value = True, "POST", "GET")

    If sRequestType = "GET" Then sData = "?"

   'construct post or get request

    For lctr = 0 To UBound(pDictValues.Keys) 

        sData = sData & pDictValues.Keys(lctr) & "=" & pDictValues.Items(lctr)

        If lctr < UBound(pDictValues.Keys) Then sData = sData & "&"

    Next

Else

    'if no name/value pairs entered, it's a request for a page that

    'does not take form values as parameters (e.g., static page)

End If

sUrl = ScriptName

If sRequestType = "GET" Then

     sUrl = sUrl & sData

     sData = ""

End If

'Open request

lRequest = HttpOpenRequest(plConnection, sRequestType, sUrl, "HTTP/1.1", "", 0, _

   INTERNET_FLAG_KEEP_CONNECTION, 0)

If lRequest <> 0 Then

    plRequest = lRequest

Else

    Disconnect

End If

If sRequestType = "POST" Then

        sHeader = "Content-Type: application/x-www-form-urlencoded"

        lLen = Len(sHeader)

End If

'send request

If HttpSendRequest(plRequest, sHeader, lLen, sData, Len(sData)) > 0 Then

    sAns = space$(RESPONSE_LENGTH)

        Do While InternetReadFile(plRequest, sAns, RESPONSE_LENGTH, lRead)

                  If lRead = 0 Then

                        Exit Do

                     Else

                        sResult = sResult & Left$(sAns, lRead)

                  End If

                  lRead = 1024

                  sAns = space$(lRead)

               Loop

'display results

frmResponse.txtResult.Text = HTML2Text(sResult)

Screen.MousePointer = vbDefault

frmResponse.Show vbModal

PostRequest = True

Else

    Disconnect

End If

End Function

 

Public Sub Disconnect()

'Clean Up

On Error Resume Next

InternetCloseHandle plRequest

InternetCloseHandle plConnection

InternetCloseHandle plHandle

End Sub

附一个网址编码函数:

 

Private Function UrlEncode(sText As String) As String

'This function converts non-alphanumeric characters to their

'hexadecimal equivalents, as required by http protocol.

    Dim sTemp As String

    Dim sAns As String

    Dim sChar As String

    Dim lctr As Long   

    For lctr = 1 To Len(sText)        

        sChar = Mid$(sText, lctr, 1) 

        'is it alphanumeric

        If sChar Like "[0-9A-Za-z]" Then

            sTemp = sTemp & sChar

        ElseIf sChar = " " Then

            sTemp = sTemp & "+"

        ElseIf True Then

            sTemp = sTemp & "%" & Right$("0" & Hex(Asc(sChar)), 2)           

        End If

       If Len(sTemp) > 1000 Then

            sAns = sAns & sTemp

            sTemp = ""

        End If

    Next

    UrlEncode = sAns & sTemp

End Function

 

 

 

 

已经有(1)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/program/545.html     欢迎订阅Eddy Blog

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言