![]() |
|
Асинхронный HTTP POST запрос на айпи адрес - несколько запросов, несколько ответов | ☑ | ||
---|---|---|---|---|
0
Азат
16.08.19
✎
15:25
|
Собственно, суть такая:
на эквайринговый терминал необходимо отправить строку (есть айпи и порт). Строка, описывающая транзакцию кодируется в 16-ричный вид и отправляется кусками по 32 знака. После чего терминал возвращает ответ, который также надо собрать в строку, распарсить и перевести в вид текста... Не пойму, как подступиться к задаче. Начал типа такого: ОбъектHTTP = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); ОбъектHTTP.Option(2,"utf-8"); ОбъектHTTP.Open("POST", "http://192.168.6.66:666", 1); ОбъектHTTP.SetTimeouts(30000, 30000, 30000, 30000); ОбъектHTTP.Send("0400010000007f0000007b3c3f786d6c"); ОбъектHTTP.Send("2076657273696f6e3d22312e30222065"); Так вот =уже второй сенд начинает ругаться, что не получены данные для обработки первого запроса, а я уже второй шлю. Всего запросов от 5 до 15 в зависимости от типа транзакции Вопрос = как передать несколько команд, на которые получить ответ. Если меняю режим с асинхронного на синхронный, сразу отваливается по таймауту. Всем спасибо и извиняюсь за сумбур |
|||
1
Garykom
гуру
16.08.19
✎
15:27
|
ОбъектHTTP2 = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
|
|||
2
Garykom
гуру
16.08.19
✎
15:27
|
И это в 8-ке есть HTTPСоединение
|
|||
3
Широкий
16.08.19
✎
15:33
|
Предположу что должно быть типа ид сессии.. И признак окончания передачи.. иначе как терминал поймет что все?
|
|||
4
Азат
16.08.19
✎
15:33
|
(2) я в курсе, а где там ключ "асинхронности" запросов?
|
|||
5
Широкий
16.08.19
✎
15:33
|
Хоят отправка кусками - выглядит бредово
|
|||
6
Йохохо
16.08.19
✎
15:34
|
";," ; вроде лишняя
https://docs.microsoft.com/en-us/windows/win32/winhttp/iwinhttprequest-open |
|||
7
Азат
16.08.19
✎
15:34
|
(3) а, извиняюсь, забыл указать - первые 8 знаков строки - длина сообщения. по которым терминал поймет, сколько передано
(6) это случайная копипаста |
|||
8
Широкий
16.08.19
✎
15:35
|
(7) Для получаетеля синхронный-асинхронный запрос мононпенисно.. Поэтому не парся.. Засад в чем то другом
|
|||
9
Широкий
16.08.19
✎
15:37
|
+8 и делай встроенным объектом. Его уже неплохо допилили
|
|||
10
Йохохо
16.08.19
✎
15:38
|
(4) у тебя там 1
|
|||
11
Азат
16.08.19
✎
15:41
|
(10) у меня я знаю, я же спрашивал про HTTPСоединение, у него в настройках не нашел такого.
(8) поставщик оборудования говорит, что это критичный момент |
|||
12
Йохохо
16.08.19
✎
15:42
|
(11) может булево туда, я хз
|
|||
13
Garykom
гуру
16.08.19
✎
15:46
|
ОбъектHTTP.Send("0400010000007f0000007b3c3f786d6c");
// вот тут где получение и обработка ответа? ОбъектHTTP.Send("2076657273696f6e3d22312e30222065"); |
|||
14
Йохохо
16.08.19
✎
15:46
|
и зачем таймаут при асинхронном запросе? надо проверять онреспонс*
The WinHttpRequest object has these events. Event Description OnError Occurs when there is a run-time error in the application. OnResponseDataAvailable Occurs when data is available from the response. OnResponseFinished Occurs when the response data is complete. OnResponseStart Occurs when the response data starts to be received. |
|||
15
Азат
16.08.19
✎
16:16
|
(14) 1С этих событий не перехватит, поэтому я просто через ОбработчикОжидания ловлю ответ
|
|||
16
Азат
19.08.19
✎
09:13
|
(1) попробовал, не взлетело
(12) попробовал, не взлетело встроенным объектом даже на 8.3.14 не взлетело тоже мож еще какие идеи есть по отправке? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |