XMLHTTP POST не хватает памяти
Я написал функцию в VBA (Excel) для обработки запроса API. Для небольших (<150 МБ или около того) запросов это работает просто отлично, но для больших запросов (>150 МБ до 300-400 МБ возвращенных данных) я получаю:
ошибка: 2147024882 (8007000e) Недостаточно памяти для выполнения этой операции.
Ниже приведен код (с удаленными неприменимыми частями):
Function SendHTTPRequest(sURL As String, Optional sGETorPOST As String = "POST", Optional sHeaders2DArray As Variant, Optional sGetBodyOrPostArgs As String) As msxml2.ServerXMLHTTP60
Dim aheaders() As Variant, i As Long
If sGETorPOST <> "GET" And sGETorPOST <> "POST" Then Exit Function
If IsMissing(sHeaders2DArray) Then
ReDim aheaders(0 To 0, 0 To 1)
aheaders(0, 0) = "User-Agent"
aheaders(0, 1) = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
Else
ReDim aheaders(LBound(sHeaders2DArray) To UBound(sHeaders2DArray), LBound(sHeaders2DArray, 2) To UBound(sHeaders2DArray, 2))
aheaders = sHeaders2DArray
End If
Set SendHTTPRequest = New msxml2.ServerXMLHTTP60
SendHTTPRequest.Open sGETorPOST, sURL, False
For i = LBound(aheaders) To UBound(aheaders)
SendHTTPRequest.setRequestHeader aheaders(i, 0), aheaders(i, 1)
Next
If sGETorPOST = "POST" Then SendHTTPRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
SendHTTPRequest.send (sGetBodyOrPostArgs) '<-- Error occurs here
End Function
Я занимаюсь этой проблемой уже два дня. Первоначально я делал запрос POST неправильно и исправил его, и я изменил с XMLHTTP на ServerXMLHTTP.
Вот соответствующий код, вызывающий функцию:
aheaders(0, 0) = "User-Agent"
aheaders(0, 1) = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
aheaders(1, 0) = "X-Requested-With"
aheaders(1, 1) = "[redacted]"
aheaders(2, 0) = "Authorization"
aheaders(2, 1) = "Basic " & EncodeBase64(USER & ":" & PASS)
sURL = URLAPI & "/api/2.0/fo/scan/"
sArgs = "action=fetch&scan_ref=" & sRef & "&mode=extended&output_format=json"
Set httpRequest = SendHTTPRequest(sURL, "POST", aheaders, sArgs)
Я тестировал в Excel 2010, 2013 и 2016. Это определенно не проблема с ресурсами. Я использую Xeon W3550 с оперативной памятью 12 ГБ и твердотельным накопителем на 500 ГБ, который заполнен менее чем наполовину.
Есть ли что-то, что я могу сделать, чтобы исправить этот код, или есть альтернативный способ сделать запрос API?