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?

0 ответов

Другие вопросы по тегам