вызов grpc видит тело / поток вызова grpc - PullRequest
0 голосов
/ 05 января 2019

Я использую Anki Vector SDK с Python для доступа к роботу Anki Vector. Однако SDK ограничен Python, и я хочу написать приложения для Android для Vector. Поэтому я пытаюсь выяснить конечные точки API и их параметры вместе с тем, как их использовать. К сожалению, Anki использует GRPC в своем SDK для доступа к конечным точкам API. Они также предоставили несколько прототипов для использования с другими языками. Однако я не мог понять, как я могу их использовать.

Вместо этого я попробовал трассировку GRPC со следующими переменными среды:

export GRPC_VERBOSITY=DEBUG
//export GRPC_TRACE=list_tracers
//export GRPC_TRACE=all 
export GRPC_TRACE=http

С помощью этого метода я могу получить заголовки для HTTP-вызова. (пример журнала трассировки ниже) Но я не вижу тело HTTP-вызова (или потокового контента)

Как я могу получить это?

I0105 16: 40: 33.658871867 2405 chttp2_transport.cc:1702] execute_stream_op [s = 0x6c90b2d4]: SEND_INITIAL_METADATA {ключ = 3a 73 63 68 65 6d 65 ': значение схемы = 68 74 74 70 73' https ', ключ = 3a 6d 65 74 68 6f 64 ': метод' значение = 50 4f 53 54 'POST', ключ = 3a 61 75 74 68 6f 72 69 74 79 ': авторитет' значение = 56 65 63 74 6f 72 2d 4b 38 50 35 'Vector-K8P5', ключ = 3a 70 61 74 68 ': значение пути = 2f 41 6e 6b 69 2e 56 65 63 74 6f 72 2e 65 78 74 65 72 6e 61 6c 5f 69 6e 74 65 72 66 61 63 65 2e 45 78 74 65 72 6e 61 6c 49 6e 74 65 72 66 61 63 65 2f 50 72 6f 74 6f 63 6f 6c 56 65 72 73 69 6f 6e '/Anki.Vector.external_interface.ExternalInterface/ProtocolVersion', key = 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e значение 'авторизации' = 42 65 61 72 65 72 20 6e 49 6f 6f 59 43 49 68 54 51 32 30 47 7a 78 78 4c 63 2b 70 53 67 3d 3d ' Носитель nIooYCIhTQ20GzxxLc + pSg == ', ключ = 74 65' te 'значение = 74 72 61 69 6c 65 72 73' трейлеры ', ключ = 63 6f 6e 74 65 6e 74 2d 74 79 70 65' content-type 'value = 61 70 70 6c 69 63 61 74 69 6f 6e 2f 67 72 70 63 'application / grpc', ключ = 75 73 65 72 2d 61 67 65 6e 74 'user-agent' значение = 67 72 70 63 2d 70 79 74 68 6f 6e 2f 31 2e 31 37 2e 31 20 67 72 70 63 2d 63 2f 37 2e 30 2e 30 20 28 6c 69 6e 75 78 3b 20 63 68 74 74 70 32 3b 20 67 69 7a 6d 6f 29 'grpc-python / 1.17.1 grpc-c / 7.0.0 (linux; chttp2; gizmo) ', ключ = 67 72 70 63 2d 61 63 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67' grpc-accept-encoding 'значение = 69 64 65 6e 74 69 74 79 2c 64 65 66 6c 61 74 65 2c 67 7a 69 70 'identity, deflate, gzip', key = 61 63 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67 'accept-encoding' значение = 69 64 65 6e 74 69 74 79 2c 67 7a 69 70 'identity, gzip'} SEND_MESSAGE: flags = 0x00000000: len = 2 SEND_TRAILING_METADATA {} RECV_INITIAL_METADATA RECV_MESSAGE RECV_TRAILING_METADATAI0105 16: 40: 33.659113265 2405 chttp2_transport.cc:1398] execute_stream_op_locked: SEND_INITIAL_METADATA {ключ = 3a 73 63 68 65 6d 65 ': значение схемы = 68 74 74 70 73' https ', ключ = 3a 6d 65 74 68 6f 64 ': метод' значение = 50 4f 53 54 'POST', ключ = 3a 61 75 74 68 6f 72 69 74 79 ': авторитет' значение = 56 65 63 74 6f 72 2d 4b 38 50 35 'Vector-K8P5', ключ = 3a 70 61 74 68 ': путь' значение = 2f 41 6e 6b 69 2e 56 65 63 74 6f 72 2e 65 78 74 65 72 6e 61 6c 5f 69 6e 74 65 72 66 61 63 65 2e 45 78 74 65 72 6e 61 6c 49 6e 74 65 72 66 61 63 65 2f 50 72 6f 74 6f 63 6f 6c 56 65 72 73 69 6f 6e '/Anki.Vector.external_interface.ExternalInterface/ProtocolVersion', ключ = 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e значение 'авторизации' = 42 65 61 72 65 72 20 6e 49 6f 6f 59 43 49 68 54 51 32 30 47 7a 78 78 4c 63 2b 70 53 67 3d 3d 'Носитель nIooYCIhTQ20GzxxLc + pSg ==', ключ = 74 65 'te' значение = 74 72 61 69 6c 65 72 73 'трейлеры', ключ = 63 6f 6e 74 65 6e 74 2d 74 79 70 65 'content-type' значение = 61 70 70 6c 69 63 61 74 69 6f 6e 2f 67 72 70 63 'приложение ation / grpc ', key = 75 73 65 72 2d 61 67 65 6e 74' user-agent 'значение = 67 72 70 63 2d 70 79 74 68 6f 6e 2f 31 2e 31 37 2e 31 20 67 72 70 63 2d 63 2f 37 2e 30 2e 30 20 28 6c 69 6e 75 78 3b 20 63 68 74 74 70 32 3b 20 67 69 7a 6d 6f 29 'grpc-python / 1.17.1 grpc-c / 7.0.0 (linux; chttp2; gizmo) ', ключ = 67 72 70 63 2d 61 63 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67' grpc-accept-encoding 'значение = 69 64 65 6e 74 69 74 79 2c 64 65 66 6c 61 74 65 2c 67 7a 69 70 'identity, deflate, gzip', key = 61 63 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67 'accept-encoding' значение = 69 64 65 6e 74 69 74 79 2c 67 7a 69 70 'identity, gzip'} SEND_MESSAGE: flags = 0x00000000: len = 2 SEND_TRAILING_METADATA {} RECV_INITIAL_METADATA RECV_MESSAGE RECV_TRAILING_METADATA; on_complete = 0x6c90b1b4 I0105 16: 40: 33.659194720 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI:: схема: https I0105 16: 40: 33.659223208 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI:: метод: POST I0105 16: 40: 33.659249145 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI:: Author: Vector-K8P5 I0105 16: 40: 33.659274769 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI:: путь: /Anki.Vector.external_interface.ExternalInterface/ProtocolVersion I0105 16: 40: 33.659301851 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI: авторизация: Носитель nIooYCIhTQ20GzxxLc + pSg == I0105 16: 40: 33.659328569 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI: te: трейлеры I0105 16: 40: 33.659354193 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI: тип содержимого: приложение / grpc I0105 16: 40: 33.659379036 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI: пользовательский агент: grpc-python / 1.17.1 grpc-c / 7.0.0 (linux; chttp2; gizmo) I0105 16: 40: 33.659405129 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI: grpc-accept-encoding: identity, deflate, gzip I0105 16: 40: 33.659431273 2405 chttp2_transport.cc:1376] HTTP: 0: HDR: CLI: принять кодировку: identity, gzip I0105 16: 40: 33.659462991 2405 chttp2_transport.cc:1187] HTTP: CLI: выделение нового grpc_chttp2_stream 0x6c90b2d4 для идентификатора 1 I0105 16: 40: 33.659492209 2405 chttp2_transport.cc:852] W: 0x6ae19ad8 Состояние КЛИЕНТА IDLE -> ПИСЬМО [START_NEW_STREAM] I0105 16: 40: 33.659522468 2405 chttp2_transport.cc:852] W: 0x6ae19ad8 Состояние КЛИЕНТА ПИСЬМО -> ПИСЬМО + БОЛЬШЕ [SEND_MESSAGE] I0105 16: 40: 33.659557571 2405 chttp2_transport.cc:1249] complete_closure_step: t = 0x6ae19ad8 0x6c90b1b4 refs = 3 flags = 0x0001 desc = op-> on_complete err = "Нет ошибок" write_state = WRITING + MORE I0105 16: 40: 33.659641005 2397 writing.cc:413] W: 0x6ae19ad8 КЛИЕНТ [1] im- (отправлено, отправлено) = (0,1) анонс = 5 I0105 16: 40: 33.659708711 2397 hpack_encoder.cc:473] Кодировать: ': Author: Vector-K8P5', elem_interned = 1 [1], k_interned = 1, v_interned = 1 I0105 16: 40: 33.659791937 2397 hpack_encoder.cc:473] Кодировать: ': path: /Anki.Vector.external_interface.ExternalInterface/ProtocolVersion', elem_interned = 0 [2], k_interned = 1, v_interned = 0I0105 16: 40: 33.659828134 2397 hpack_encoder.cc:473] Кодировать: 'авторизация: Носитель nIooYCIhTQ20GzxxLc + pSg ==', elem_interned = 0 [2], k_interned = 0, v_interned = 0 I0105 16: 40: 33.659860684 2397 hpack_encoder.cc:473] Кодировать: 'te: trailers', elem_interned = 1 [3], k_interned = 1, v_interned = 1 I0105 16: 40: 33.659891308 2397 hpack_encoder.cc:473] Кодировать: 'content-type: application / grpc', elem_interned = 1 [3], k_interned = 1, v_interned = 1 I0105 16: 40: 33.659961983 2397 hpack_encoder.cc:473] Кодировать: 'user-agent: grpc-python / 1.17.1 grpc-c / 7.0.0 (linux; chttp2; gizmo)', elem_interned = 1 [1], k_interned = 1, v_interned = 1 I0105 16: 40: 33.659995888 2397 hpack_encoder.cc:473] Кодировать: 'grpc-accept-encoding: identity, deflate, gzip', elem_interned = 1 [3], k_interned = 1, v_interned = 1 I0105 16: 40: 33.660025887 2397 hpack_encoder.cc:473] Кодировать: 'accept-encoding: identity, gzip', elem_interned = 1 [3], k_interned = 1, v_interned = 1 I0105 16: 40: 33.660059531 2397 chttp2_transport.cc:1249] complete_closure_step: t = 0x6ae19ad8 0x6c90b1b4 refs = 2 flags = 0x0001 desc = send_initial_metadata_finished err = «Нет ошибки» write_state M = R I0105 16: 40: 33.660103644 2397 chttp2_transport.cc:1249] complete_closure_step: t = 0x6ae19ad8 0x6c90b1b4 refs = 1 flags = 0x0001 desc = send_trailing_metadata_finished err = "Нет ошибок" write_state = WORE = WORE I0105 16: 40: 33.660134112 2397 chttp2_transport.cc:1249] complete_closure_step: t = 0x6ae19ad8 0x6c90b1b4 refs = 0 flags = 0x0001 desc = on_write_finished_cb err = «Нет ошибок» write_state = MORE WRING I0105 16: 40: 33.660166923 2397 chttp2_transport.cc:852] W: 0x6ae19ad8 Состояние КЛИЕНТА WRITING + MORE -> WRITING [начать запись в текущем потоке] I0105 16: 40: 33.660500817 2397 chttp2_transport.cc:852] W: 0x6ae19ad8 СОСТОЯНИЕ КЛИЕНТА НАПИСАНИЕ -> IDLE [закончить запись] I0105 16: 40: 33.660902208 2400 chttp2_transport.cc:2609] ipv4: 192.168.254.44: 443: Завершить проверку связи BDP с ошибкой = «Нет ошибок» I0105 16: 40: 33.671334525 2400 parsing.cc:656] парсинг initial_metadata I0105 16: 40: 33.671392960 2400 hpack_parser.cc:636] Декодирование: ': status: 200', elem_interned = 1 [3], k_interned = 1, v_interned = 1 I0105 16: 40: 33.671427021 2400 parsing.cc:407] HTTP: 1: HDR: CLI:: статус: 32 30 30 '200' I0105 16: 40: 33.671476551 2400 hpack_parser.cc:636] Декодирование: 'content-type: application / grpc', elem_interned = 1 [3], k_interned = 1, v_interned = 1 I0105 16: 40: 33.671506810 2400 parsing.cc:407] HTTP: 1: HDR: CLI: тип контента: 61 70 70 6c 69 63 61 74 69 6f 6e 2f 67 72 70 63 'application / grpc' I0105 16: 40: 33.671552277 2400 hpack_parser.cc:636] Расшифровка: «трейлер: Grpc-Status», elem_interned = 1 [1], k_interned = 1, v_interned = 1 I0105 16: 40: 33.671581651 2400 parsing.cc:407] HTTP: 1: HDR: CLI: трейлер: 47 72 70 63 2d 53 74 61 74 75 73 'Grpc-Status' I0105 16: 40: 33.671617014 2400 hpack_parser.cc:636] Декодирование: 'trailer: Grpc-Message', elem_interned = 1 [1], k_interned = 1, v_interned = 1 I0105 16: 40: 33.671645555 2400 parsing.cc:407] HTTP: 1: HDR: CLI: трейлер: 47 72 70 63 2d 4d 65 73 73 61 67 65 'Grpc-Message' I0105 16: 40: 33.671682689 2400 hpack_parser.cc:636] Декодирование: 'трейлер: Grpc-Status-Details-Bin', elem_interned = 1 [1], k_interned = 1, v_interned = 1 I0105 16: 40: 33.671714771 2400 parsing.cc:407] HTTP: 1: HDR: CLI: трейлер: 47 72 70 63 2d 53 74 61 74 75 73 2d 44 65 74 61 69 6c 73 2d 42 69 6e 'Grpc-Status -Details-Bin' I0105 16: 40: 33.674612891 2400 parsing.cc:661] parsing trailing_metadata I0105 16: 40: 33.674655858 2400 hpack_parser.cc:636] Декодирование: 'grpc-status: 0', elem_interned = 1 [3], k_interned = 1, v_interned = 1 I0105 16: 40: 33.674685597 2400 parsing.cc:503] HTTP: 1: TRL: CLI: статус grpc: 30 '0' E0105 16: 40: 33.677045300 2396 fork_posix.cc:63] Поддержка вилки совместима только со стратегиями опроса epoll1 и pollI0105 16: 40: 33.677160556 2396 fork_posix.cc:68] Другие потоки в настоящее время обращаются к gRPC, пропуская обработчики fork ()

...