Я хочу знать, как отправить собственный заголовок (или метаданные) с помощью Python gRPC. Я просмотрел документы и ничего не нашел.
Как отправить собственный заголовок (метаданные) с помощью Python gRPC?
Ответы (2)
Я понял, читая код. Вы можете отправить параметр metadata
в вызов функции, где metadata
— это кортеж из двух кортежей:
metadata = (('md-key', 'some value'),
('some-md-key', 'another value'))
response = stub.YourFunctionCall(request=request, metadata=metadata)
person
avi
schedule
13.07.2017
В последнее время это должен быть список из двух кортежей: метаданные = [('k1', 'v1'), ('k2', 'v2')]
- person Olshansk; 29.09.2017
Если у вас есть только один заголовок, например,
metadata = (('md-key', 'some value'))
, этот код не будет работать. Вы должны добавить их в виде массива следующим образом: metadata = [('md-key', 'some value')]
- person Avión; 05.04.2019
Дело не в том, что запрос не выполняется, а в том, что Python не интерпретирует это как двойку. Вы также можете использовать
metadata = (('md-key', 'some value'), )
- person James S; 21.02.2020
Пожалуйста, прочитайте пример в github. Например:
response, call = stub.SayHello.with_call(
helloworld_pb2.HelloRequest(name='you'),
metadata=(
('initial-metadata-1', 'The value should be str'),
('binary-metadata-bin',
b'With -bin surffix, the value can be bytes'),
('accesstoken', 'gRPC Python is great'),
))
Или, если вы хотите определить перехватчик
metadata = []
if client_call_details.metadata is not None:
metadata = list(client_call_details.metadata)
metadata.append((
header,
value,
))
client_call_details = _ClientCallDetails(
client_call_details.method, client_call_details.timeout, metadata,
client_call_details.credentials)
Важно то, что ключ метаданных не может иметь верхний регистр (это меня давно беспокоило).
person
flycash
schedule
18.02.2019
Прямая ссылка на пример: github.com/grpc/ grpc/blob/master/examples/python/metadata/
- person Attila123; 12.03.2020