Уже не знаю где искать ответ, но тут всегда совместно получалось решить задачу.
Использую VBA для работы с REST API Битрикс. Простые запросы с легкостью отправляю таким макросом
И с большим количеством полей проблем нет.
Использую простую функцию для отправки.
Код |
---|
Function httpSend(url As String) As String Set httpRequest = CreateObject("MSXML2.XMLHTTP") 'Msxml2.XMLHTTP.6.0 Debug.Print ("GET send: " & url) httpRequest.Open "GET", url, False httpRequest.Send httpSend = httpRequest.responseText End Function |
Код |
---|
Public Function RStURL(ByVal txt As String) As String For i = 1 To Len(txt) l = Mid(txt, i, 1) Select Case AscW(l) Case Is > 4095: T = "%" & Hex(AscW(l) \ 64 \ 64 + 224) & "%" & Hex(AscW(l) \ 64) & "%" & Hex(8 * 16 + AscW(l) Mod 64) Case Is > 127: T = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64) Case 32: T = "%20" Case 43: T = "%2b" Case 47: T = "%2F" Case Else: T = l End Select RStURL = RStURL & T Next End Function |
Код |
---|
Public Function EncodeFile(strPicPath As String) As String Const adTypeBinary = 1 ' Binary file is encoded ' Variables for encoding Dim objXML Dim objDocElem ' Variable for reading binary picture Dim objStream ' Open data stream from picture Set objStream = CreateObject("ADODB.Stream") objStream.Type = adTypeBinary objStream.Open objStream.LoadFromFile (strPicPath) ' Create XML Document object and root node ' that will contain the data Set objXML = CreateObject("MSXml2.DOMDocument") Set objDocElem = objXML.createElement("Base64Data") objDocElem.DataType = "bin.base64" ' Set binary value objDocElem.nodeTypedValue = objStream.Read() ' Get base64 value EncodeFile = objDocElem.Text ' Clean all Set objXML = Nothing Set objDocElem = Nothing Set objStream = Nothing End Function |
выглядит этот get вот так (это к вопросу 2)
Код |
---|
{ "fields": { "ufCrm1617027453943": [ "myfile.pdf", "...base64_encoded_file_content..." ] } } |
Но в результате получаю ошибку "Сбой скачивания указанного ресурса" Run-time error '-2146697208 (800c0008)':
Если заменить реальную строчку base64_encoded_file_content на "ххх" например, все отрабатывает, но файл понятно не открывается и весит 2б
Длинна символьного URL запроса составляет: 161 527 символов - и есть ощущение, что эта ошибка связана с каким то ограничением MSXML2.XMLHTTP.
Уважаемые эксперты, знаете ли вы:
1) Есть ли ограничения по количеству символов GET запроса?
2) Как в экселе можно передать запрос как GET запрос выше из VBA? - не понимаю как его оформить в VBA.
Заранее благодарен за помощь.
Андрей VG, Doober, Msi2102, Дмитрий(The_Prist) Щербаков, очень надеюсь на вашш опыт и помощь
