I am using Anki Vector SDK with Python to access Anki Vector robot. However, the SDK is limited to Python and I want to write Android apps for the Vector. So I am trying to figure out API endpoints and their parameters together with how to use them. Unfortunately Anki has used GRPC on their SDK to access API endpoints. They also supplied some proto files to use with other languages. However, I could not understand how I can use them.
Instead, I tried GRPC tracing with the following environment variables:
export GRPC_VERBOSITY=DEBUG
//export GRPC_TRACE=list_tracers
//export GRPC_TRACE=all
export GRPC_TRACE=http
I can get the headers for the HTTP call with this method. (example trace log below) But I can't see the body of the HTTP call (or the streaming content)
How can I get it?
I0105 16:40:33.658871867 2405 chttp2_transport.cc:1702] perform_stream_op[s=0x6c90b2d4]: SEND_INITIAL_METADATA{key=3a 73 63 68 65 6d 65 ':scheme' value=68 74 74 70 73 'https', key=3a 6d 65 74 68 6f 64 ':method' value=50 4f 53 54 'POST', key=3a 61 75 74 68 6f 72 69 74 79 ':authority' value=56 65 63 74 6f 72 2d 4b 38 50 35 'Vector-K8P5', key=3a 70 61 74 68 ':path' value=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 'authorization' value=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 'Bearer nIooYCIhTQ20GzxxLc+pSg==', key=74 65 'te' value=74 72 61 69 6c 65 72 73 'trailers', key=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', key=75 73 65 72 2d 61 67 65 6e 74 'user-agent' value=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)', key=67 72 70 63 2d 61 63 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67 'grpc-accept-encoding' value=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' value=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 I0105 16:40:33.659113265 2405 chttp2_transport.cc:1398] perform_stream_op_locked: SEND_INITIAL_METADATA{key=3a 73 63 68 65 6d 65 ':scheme' value=68 74 74 70 73 'https', key=3a 6d 65 74 68 6f 64 ':method' value=50 4f 53 54 'POST', key=3a 61 75 74 68 6f 72 69 74 79 ':authority' value=56 65 63 74 6f 72 2d 4b 38 50 35 'Vector-K8P5', key=3a 70 61 74 68 ':path' value=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 'authorization' value=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 'Bearer nIooYCIhTQ20GzxxLc+pSg==', key=74 65 'te' value=74 72 61 69 6c 65 72 73 'trailers', key=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', key=75 73 65 72 2d 61 67 65 6e 74 'user-agent' value=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)', key=67 72 70 63 2d 61 63 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67 'grpc-accept-encoding' value=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' value=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: :scheme: https I0105 16:40:33.659223208 2405 chttp2_transport.cc:1376] HTTP:0:HDR:CLI: :method: POST I0105 16:40:33.659249145 2405 chttp2_transport.cc:1376] HTTP:0:HDR:CLI: :authority: Vector-K8P5 I0105 16:40:33.659274769 2405 chttp2_transport.cc:1376] HTTP:0:HDR:CLI: :path: /Anki.Vector.external_interface.ExternalInterface/ProtocolVersion I0105 16:40:33.659301851 2405 chttp2_transport.cc:1376] HTTP:0:HDR:CLI: authorization: Bearer nIooYCIhTQ20GzxxLc+pSg== I0105 16:40:33.659328569 2405 chttp2_transport.cc:1376] HTTP:0:HDR:CLI: te: trailers I0105 16:40:33.659354193 2405 chttp2_transport.cc:1376] HTTP:0:HDR:CLI: content-type: application/grpc I0105 16:40:33.659379036 2405 chttp2_transport.cc:1376] HTTP:0:HDR:CLI: user-agent: 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: accept-encoding: identity,gzip I0105 16:40:33.659462991 2405 chttp2_transport.cc:1187] HTTP:CLI: Allocating new grpc_chttp2_stream 0x6c90b2d4 to id 1 I0105 16:40:33.659492209 2405 chttp2_transport.cc:852] W:0x6ae19ad8 CLIENT state IDLE -> WRITING [START_NEW_STREAM] I0105 16:40:33.659522468 2405 chttp2_transport.cc:852] W:0x6ae19ad8 CLIENT state WRITING -> WRITING+MORE [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="No Error" write_state=WRITING+MORE I0105 16:40:33.659641005 2397 writing.cc:413] W:0x6ae19ad8 CLIENT[1] im-(sent,send)=(0,1) announce=5 I0105 16:40:33.659708711 2397 hpack_encoder.cc:473] Encode: ':authority: Vector-K8P5', elem_interned=1 [1], k_interned=1, v_interned=1 I0105 16:40:33.659791937 2397 hpack_encoder.cc:473] Encode: ':path: /Anki.Vector.external_interface.ExternalInterface/ProtocolVersion', elem_interned=0 [2], k_interned=1, v_interned=0 I0105 16:40:33.659828134 2397 hpack_encoder.cc:473] Encode: 'authorization: Bearer nIooYCIhTQ20GzxxLc+pSg==', elem_interned=0 [2], k_interned=0, v_interned=0 I0105 16:40:33.659860684 2397 hpack_encoder.cc:473] Encode: 'te: trailers', elem_interned=1 [3], k_interned=1, v_interned=1 I0105 16:40:33.659891308 2397 hpack_encoder.cc:473] Encode: 'content-type: application/grpc', elem_interned=1 [3], k_interned=1, v_interned=1 I0105 16:40:33.659961983 2397 hpack_encoder.cc:473] Encode: '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] Encode: '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] Encode: '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="No Error" write_state=WRITING+MORE 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="No Error" write_state=WRITING+MORE 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="No Error" write_state=WRITING+MORE I0105 16:40:33.660166923 2397 chttp2_transport.cc:852] W:0x6ae19ad8 CLIENT state WRITING+MORE -> WRITING [begin write in current thread] I0105 16:40:33.660500817 2397 chttp2_transport.cc:852] W:0x6ae19ad8 CLIENT state WRITING -> IDLE [finish writing] I0105 16:40:33.660902208 2400 chttp2_transport.cc:2609] ipv4:192.168.254.44:443: Complete BDP ping err="No Error" I0105 16:40:33.671334525 2400 parsing.cc:656] parsing initial_metadata I0105 16:40:33.671392960 2400 hpack_parser.cc:636] Decode: ':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: :status: 32 30 30 '200' I0105 16:40:33.671476551 2400 hpack_parser.cc:636] Decode: '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: content-type: 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] Decode: 'trailer: 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: trailer: 47 72 70 63 2d 53 74 61 74 75 73 'Grpc-Status' I0105 16:40:33.671617014 2400 hpack_parser.cc:636] Decode: '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: trailer: 47 72 70 63 2d 4d 65 73 73 61 67 65 'Grpc-Message' I0105 16:40:33.671682689 2400 hpack_parser.cc:636] Decode: 'trailer: 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: trailer: 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] Decode: '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-status: 30 '0' E0105 16:40:33.677045300 2396 fork_posix.cc:63] Fork support is only compatible with the epoll1 and poll polling strategies I0105 16:40:33.677160556 2396 fork_posix.cc:68] Other threads are currently calling into gRPC, skipping fork() handlers
User contributions licensed under CC BY-SA 3.0