Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.07.2020
Сообщений: 65
1

Access и WinHttpRequest (Или что-то еще)

09.12.2021, 15:36. Показов 1683. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток столкнулся с проблемой обмена с сервером и записыванием данных в Access. Сейчас пользуюсь програмулиной cURL из под командной строки но из-за некоторых причин с ним нужно растаться(((

Вся суть получить ответ в файл и дальше уже работать без проблем.
Как записать функцию такого плана :
Visual Basic
1
2
3
4
Dim wshA As Object
Set wshA = CreateObject("WScript.Shell")
wshA.Run "cmd /c curl -X POST -H ""Accept: application/xml"" -H ""Content-Type: application/json"" -H @C:\TokenGIS.txt -d ""[""""" & DM & """""]"" ""https://markirovka.crpt.ru/api/v3/true-api/cises/info"" > C:\dok.xml", 0, True
Set wshA = Nothing
В виде WinHttpRequest, я сделал Набросок и наверное этот самый удачный:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim Token
Dim txtReply
Open "C:TokenGIS.txt" For Input As #1: Token = Input(LOF(1), 1): Close #1
Dim rq As WinHttp.WinHttpRequest
 
  Set rq = New WinHttpRequest
  
  rq.Open "POST", "https://markirovka.crpt.ru/api/v3/true-api/cises/info", 0 ' в Me.txtURI.Value лежит 'http://www.ru''
  rq.setRequestHeader "Content-Type", "application/json"
  rq.setRequestHeader "Accept", "application/xml"
  rq.setRequestHeader "Authorization: Bearer", Replace(Token, "Authorization: Bearer ", "")
  
  rq.send "[""" & DM & """]"
  txtReply = rq.responseText

Но ругается на строчку:
rq.setRequestHeader "Authorization: Bearer", Replace(Token, "Authorization: Bearer ", "")
в Tokene больше 255 символов

Подскажите как пользоваться WinHttpRequest
Если не затруднит киньте пару примеров с пояснениями
Заранее благодарю всей душой))))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2021, 15:36
Ответы с готовыми решениями:

Простая задача с таблицей Excel, возможно access или что-то еще.
Задача прикладная - просто нужен результат. Есть таблица из нескольких колонок(номер заказа,...

Что мне делать с многоуровневым меню ? Вытаскивать напрямую из БД или кэшировать или что то еще ?
Меню выглядит так: **от** ~alfa romeo - модель - тип запчасти **до** ~volvo - модель - тип...

Пишу программу, для моделирования физ. процесса, что использовать для визуализации: окно, с помощью CreateWindow, или канву, или ещё что-то?
Доброго времени суток, делаю программу, для моделирования физ. процесса, так вот что использовать...

Или PageMethods или AJAX или еще что?
У меня есть на странице FileUpoader и кнопочка "Обновить аватарку". То есть я клацаю на Обзор......

12
1266 / 448 / 129
Регистрация: 21.03.2013
Сообщений: 1,210
09.12.2021, 17:45 2
Цитата Сообщение от keshagraf Посмотреть сообщение
Но ругается на строчку:
а как ругается?

Добавлено через 22 минуты
Цитата Сообщение от keshagraf Посмотреть сообщение
Visual Basic
1
rq.setRequestHeader "Authorization: Bearer", Replace(Token, "Authorization: Bearer ", "")
а если заменить на

Visual Basic
1
rq.setRequestHeader "Authorization", "Bearer " & Replace(Token, "Authorization: Bearer ", "")
1
0 / 0 / 0
Регистрация: 30.07.2020
Сообщений: 65
10.12.2021, 08:35  [ТС] 3
Нашел половину решения:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim http As WinHttp.WinHttpRequest
  Set http = New WinHttpRequest
 http.Open "POST", "https://markirovka.crpt.ru/api/v3/true-api/cises/info", False
 http.setRequestHeader "Accept", "application/xml"
 http.setRequestHeader "Content-Type", "application/json"
 http.setRequestHeader "Authorization", Replace(Token, "Authorization: ", "")
 
 
 http.send "[""" & DM & """]"
 otvet = http.responseText
Но есть проблема Token считывается не полностью (Пишет что необходима авторизация) в нем 6000+ символов
Как обойти эту ситуацию? и можно ли в http.setRequestHeader прикрепить файл?

Добавлено через 22 минуты
С Token решил все с ним нормально я немного не так его сделал.))
Подскажите можно ли как-то подставить файлы в http.setRequestHeader и http.send
без их предварительного чтения?

Добавлено через 6 минут
И что делать с ошибкой на рунтайм версии "приложение остановлено из-за ошибки выполнения" помогите ))))
0
1266 / 448 / 129
Регистрация: 21.03.2013
Сообщений: 1,210
10.12.2021, 10:39 4
Цитата Сообщение от keshagraf Посмотреть сообщение
"приложение остановлено из-за ошибки выполнения" помогите )
keshagraf, вам -возможно поможет Eugene-LS, обратитесь к нему
вот его рекомендации, если я проблему угадал
Ошибка при выборе источника данных ODBC
1
10745 / 5585 / 1411
Регистрация: 05.10.2016
Сообщений: 15,793
10.12.2021, 10:46 5
Цитата Сообщение от keshagraf Посмотреть сообщение
И что делать с ошибкой на рунтайм версии "приложение остановлено из-за ошибки выполнения" помогите
Видимо нужно отладить код хорошенько и вписать обработчики ошибок.
RunTime "любит" чёткий код ...
1
0 / 0 / 0
Регистрация: 30.07.2020
Сообщений: 65
10.12.2021, 13:07  [ТС] 6
Свем спасибо нашел решение было достаточно добавить строчку в код
Visual Basic
1
http.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = &H3300
Нашел на других формах точно что это я не понял, но оно работает)))
0
1266 / 448 / 129
Регистрация: 21.03.2013
Сообщений: 1,210
10.12.2021, 14:50 7
Цитата Сообщение от keshagraf Посмотреть сообщение
Нашел на других формах точно что это я не понял, но оно работает
главное чтоб корректно работает

из описания
WinHttpRequestOption_SslErrorIgnoreFlags

Sets or retrieves a VARIANT that indicates which server certificate errors should be ignored. This can be a combination of one or more of the following flags.
Table 1
Error Value
Unknown certification authority (CA) or untrusted root 0x0100
Wrong usage 0x0200
Invalid common name (CN) 0x1000
Invalid date or certificate expired 0x2000

The default value of this option in Version 5.1 of WinHTTP is zero, which results in no errors being ignored. In earlier versions of WinHTTP, the default setting was 0x3300, which resulted in all server certificate errors being ignored by default.
следует, что по умолчанию в запросе учитываются все ошибки сертификата сервера, а вы установили флаг
чтобы любые ошибки сертификата сервера игнорировались при запросе
1
Эксперт MS Access
7442 / 4576 / 301
Регистрация: 12.08.2011
Сообщений: 14,240
10.12.2021, 21:14 8
Цитата Сообщение от keshagraf Посмотреть сообщение
точно что это я не понял
это вот это для сертификата:
Visual Basic
1
on error resume next
А хорошо это или плохо - решать вам
1
0 / 0 / 0
Регистрация: 30.07.2020
Сообщений: 65
13.12.2021, 10:53  [ТС] 9
Всем спасибо за помощь друзья, с эти разобрался и получилось очень хорошее решение и теперь планирую уйти от cURL окончательно, но как всегда не без тупика)))

Как с помощью этой команды отправить файл на сервер?
В курле это выглядит так:
Код
curl -F "xml_file=@ActFixBarCode.xml" 
http://localhost:8080/opt/in/ActFixBarCode
Я пробую вот так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim otvet
 
 http.Open "POST", "http://localhost:8080/opt/in/ActFixBarCode", False
 http.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = &H3300
 
 
Dim xmlDoc As Object
Set xmlDoc = CreateObject("MSXML2.DOMDocument")
 xmlDoc.async = False
 xmlDoc.Load ("C:\555555\Старое\ActFixBarCode.xml")
 
 http.send xmlDoc
 otvet = http.responseText
 
MsgBox otvet
Set http = Nothing
Set xmlDoc = Nothing
Но файл таким образом не получается отправить, подскажите пожалуйста как это должно выглядеть?

Заранее спасибо))

Добавлено через 1 час 56 минут
Нашел решение на просторах интернета и немного его отредактировав все заработало, оставлю тут если кому то понадобится
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Function ÎòïðàâêàPOST(sUrl As String, sFileName As String, Optional ByVal bAsync As Boolean) As String
    Const STR_BOUNDARY  As String = "3fbd04f5-b1ed-4060-99b9-fca7ff59c113"
    Dim nFile           As Integer
    Dim baBuffer()      As Byte
    Dim sPostData       As String
 
    '--- read file
    nFile = FreeFile
    Open sFileName For Binary Access Read As nFile
    If LOF(nFile) > 0 Then
        ReDim baBuffer(0 To LOF(nFile) - 1) As Byte
        Get nFile, , baBuffer
        sPostData = StrConv(baBuffer, vbUnicode)
    End If
    Close nFile
    '--- prepare body
    sPostData = "--" & STR_BOUNDARY & vbCrLf & _
        "Content-Disposition: form-data; name=""xml_file""; filename=""" & Mid$(sFileName, InStrRev(sFileName, "\") + 1) & """" & vbCrLf & _
        "Content-Type: application/xml" & vbCrLf & vbCrLf & _
        sPostData & vbCrLf & _
        "--" & STR_BOUNDARY & "--"
    '--- post
    With CreateObject("Microsoft.XMLHTTP")
        .Open "POST", sUrl, bAsync
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & STR_BOUNDARY
        .send pvToByteArray(sPostData)
        If Not bAsync Then
            pvPostFile = .responseText
            MsgBox .status
        End If
    End With
End Function
 
Private Function pvToByteArray(sText As String) As Byte()
    pvToByteArray = StrConv(sText, vbFromUnicode)
End Function
0
0 / 0 / 0
Регистрация: 30.07.2020
Сообщений: 65
01.06.2022, 10:35  [ТС] 10
Не стал создавать новую тему надеюсь подскажите в этой
Появилась новая необходимость подключить Плати QR Сбера
всю голову сломал, как при подключении использовать сертификат.
Нашел пример на 1С:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Процедура АвторизацияНаСервере()
    GUID = Новый УникальныйИдентификатор();
    СтрокаGUID = СтрЗаменить(Строка(GUID),"-","");
    ID = "837c77a6-2aab-4480-9271-71b85b28****";
    Secret = "M3kJ5bS3pA8nF1bC7tP0tR6hY8dF6rX4lM1oI4rE8wV4fA****";
    IDSecret64 = ШтрихкодВBase64(ID + ":" + Secret); 
    Authorization = "Basic " + IDSecret64; 
                                        
    ssl = Новый ЗащищенноеСоединениеOpenSSL
            (Новый СертификатКлиентаФайл("H:\QR\nikiforovvn@mail.ru.p12","PlatiQR2021"));
 
    HTTPСоединение = Новый HTTPСоединение("dev.api.sberbank.ru",443,,,,,ssl);
            
    ПараметрыЗапроса = "?grant_type=client_credentials&scope=https%3A%2F%2Fapi.sberbank.ru%2Forder.create"; //
    ТекстЗапроса = "https://api.sberbank.ru/ru/prod/tokens/v2/oauth";
        
    HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса);
    HTTPЗапрос.АдресРесурса = ТекстЗапроса + ПараметрыЗапроса; 
    HTTPЗапрос.Заголовки.Вставить("x-ibm-client-id", ID);    
    HTTPЗапрос.Заголовки.Вставить("authorization", Authorization);    
    HTTPЗапрос.Заголовки.Вставить("rquid", СтрокаGUID);    
    HTTPЗапрос.Заголовки.Вставить("content-type","application/x-www-form-urlencoded" ); //"json"    
    HTTPЗапрос.Заголовки.Вставить("accept", "application/json");
 
 
    Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
 
КонецПроцедуры

Подскажите как такое же сделать в акцес или хотя бы вот эту строку не пойму как и какими силами её сделать


1C
1
2
 ssl = Новый ЗащищенноеСоединениеOpenSSL
            (Новый СертификатКлиентаФайл("H:\QR\nikiforovvn@mail.ru.p12","PlatiQR2021"));
0
10745 / 5585 / 1411
Регистрация: 05.10.2016
Сообщений: 15,793
01.06.2022, 11:06 11
Цитата Сообщение от keshagraf Посмотреть сообщение
столкнулся с проблемой обмена с сервером и записыванием данных в Access
Не уверен что я правильно вас понял, но вот:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Function GetHTMLPageByURL(URL$) As String
' Функция возвращает тело переданной в URL страницы
'--------------------------------------------------------------------
 
Dim objHTTP As Object
Dim iTimeOut%
    
    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    
    'iTimeOut = 2000 'Milliseconds
    'objHTTP.setTimeouts iTimeOut, iTimeOut, iTimeOut, iTimeOut
    
    objHTTP.Open "GET", URL$, False
    objHTTP.Send
    
    GetHTMLPageByURL = objHTTP.ResponseText
    
    Set objHTTP = Nothing
 
End Function

+
Вариант через IE

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Public Function GetHTMLPageByURL2(URL$) As String
Const READYSTATE_COMPLETE = 4
Dim IE As Object
Dim html As Object
Dim htmlBody As Variant
 
 
    Set IE = CreateObject("InternetExplorer.Application")
    'IE.Top = 0
    'IE.Left = 0
    'IE.Width = 800
    'IE.Height = 600
    
    'IE.Visible = True
    IE.Visible = False
    IE.navigate URL$
 
 
'Wait until IE is done loading page
    Do While IE.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop
 
'HTML document returned
    Set html = IE.Document
    GetHTMLPageByURL2 = html.DocumentElement.innerHTML
 
    'IE.Visible = True
    IE.Quit
    Set IE = Nothing
 
End Function
0
0 / 0 / 0
Регистрация: 30.07.2020
Сообщений: 65
01.06.2022, 11:52  [ТС] 12
Нет вся проблема что в АПИ сбера требуется при подключении привязать сертификат .P12 а как это сделать ума не приложу
0
10745 / 5585 / 1411
Регистрация: 05.10.2016
Сообщений: 15,793
01.06.2022, 12:03 13
Цитата Сообщение от keshagraf Посмотреть сообщение
при подключении привязать сертификат .P12 а как это сделать ума не приложу
Задать свой вопрос в MS - не пробовали
MicroSoft - до сих пор в "гараже", - главный устроитель Билли Калиткин - но они молодцы! Быстро отвечают в течении 400 - 900 суток !
0
01.06.2022, 12:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2022, 12:03
Помогаю со студенческими работами здесь

Выбор модема-Д-линк или Зухель? или еще что?
В квартиру заходит выделенная линия. к роутеру будет подключены по витой паре 2 компа + 2 ноутбука...

XML или База данных или Что - то ещё?
Доброго времени суток! Есть такая задача: элементу соответствует несколько свойств, например:...

Лишняя или недостающая скобка? Или что-то еще?
Не понимаю, в чем ошибка. Итак, есть нижеследующий код. unit Unit2; interface procedure...

Не запускается Windows, не пойму что сломалось - ОС, жесткий диск или еще что-то...
Включаю ноутбук. Всплывает окно &quot;Восстановление после ошибок Windows&quot;, в котором предлагается...

Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?
Привет всем! Помогите правильно алгоритм выбрать. Надо получать из файлов (около 8000 файлов)...

Подскажите что лучше:Denwer или что-то ещё?
Не знаю что лучше?

Ухуху или 1ps.ru? Или еще что-то?
Или вот еще нашла сайт: submitter.ru - хороший он или так себе? Каким сервисом лучше пользоваться?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru