1,486
社区成员
发帖
与我相关
我的任务
分享
'用法
Debug.Print HttpPOST("Http://xxx.xxx.xxx","JSON 数据") 'URL参数里的 “Http://” 不能省
你试试看吧。
'方法一
Public Function HttpPOST(ByVal URL As String, ByVal JSONData As String = "") As String
Dim HTTP As Object
Set HTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
HTTP.Option(6) = False
HTTP.Option(4) = 13056
HTTP.Open "POST", URL
HTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
HTTP.SetRequestHeader "Content-Length", LenB(StrConv(JSONData, vbFromUnicode))
HTTP.Send JSONData
HttpPOST = HTTP.ResponseText
Set HTTP = Nothing
End Function
'方法二 这个方法我没验证过,可能需要自己修改
Public Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Public Function UTF8Decode(ByRef sUTF8() As Byte, Optional ByVal CodePage As Long = 65001) As String
Dim lngUtf8Size As Long, lngBufferSize As Long, strBuffer As String, lngResult As Long
On Error GoTo hErr
If UBound(sUTF8) = 0 Then Exit Function
lngUtf8Size = UBound(sUTF8) + 1
lngBufferSize = lngUtf8Size * 2
strBuffer = String(lngBufferSize, vbNullChar)
lngResult = MultiByteToWideChar(CodePage, 0, sUTF8(0), lngUtf8Size, StrPtr(strBuffer), lngBufferSize)
If lngResult Then UTF8Decode = Left(strBuffer, lngResult)
hErr:
End Function
Public Function UTF8Encode(ByVal strUnicode As String, Optional ByVal CodePage As Long = 65001) As Byte()
Dim TLen As Long, lngBufferSize As Long, lngResult As Long, Arr() As Byte, I As Integer
TLen = Len(strUnicode)
If TLen = 0 Then Exit Function
lngBufferSize = TLen * 3 + 1
ReDim Arr(lngBufferSize - 1)
lngResult = WideCharToMultiByte(CodePage, 0, StrPtr(strUnicode), TLen, Arr(0), lngBufferSize, vbNullString, 0)
If lngResult Then
lngResult = lngResult - 1
ReDim Preserve Arr(lngResult)
UTF8Encode = Arr
End If
End Function
Public Function HttpPOST(ByVal URL As String, ByVal JSONData As String = "") As String
Dim HTTP As Object,Arr() As Byte
Set HTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
HTTP.Option(6) = False
HTTP.Option(4) = 13056
Arr=UTF8Encode(JSONData)
HTTP.Open "POST", URL
HTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
HTTP.SetRequestHeader "Content-Length", Ubound(Arr)+1
HTTP.Send Arr
Arr = HTTP.Responsebody
HttpPOST=UTF8Decode(Arr)
Set HTTP = Nothing
End Function