vb调用winInet API接口post数据到指定的url (转)

本文介绍如何使用VB通过WinInetAPI接口完成POST数据提交。该方法涉及多个步骤,包括打开会话、连接服务器、发送请求及读取响应等。示例代码展示了如何设置请求头及发送POST数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vb调用winInet API接口post数据到指定的url (转)[@more@]『vb 调用win .NET 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
'E Mail: sam@vbsquare.com

Private Declare Function InternetOpen Lib "wininet.dll" _
 Alias "InternetOpenA" _
 (ByVal lpszCallerName As String, _
 ByVal dwAccessType As Long, _
 ByVal lpsz ProxyName 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 lpszPass word 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 lpsz objectName 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 bDoL oop As Boolean
 Dim sRea dbuffer 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


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-987496/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-987496/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值