Уже не знаю где искать ответ, но тут всегда совместно получалось решить задачу.
Использую 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..."
]
}
} |
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) Щербаков, очень надеюсь на вашш опыт и помощь