Как отправить собственный заголовок (метаданные) с помощью Python gRPC?

Я хочу знать, как отправить собственный заголовок (или метаданные) с помощью Python gRPC. Я просмотрел документы и ничего не нашел.


person avi    schedule 13.07.2017    source источник


Ответы (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
comment
В последнее время это должен быть список из двух кортежей: метаданные = [('k1', 'v1'), ('k2', 'v2')] - person Olshansk; 29.09.2017
comment
Если у вас есть только один заголовок, например, metadata = (('md-key', 'some value')), этот код не будет работать. Вы должны добавить их в виде массива следующим образом: metadata = [('md-key', 'some value')] - person Avión; 05.04.2019
comment
Дело не в том, что запрос не выполняется, а в том, что 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
comment
Прямая ссылка на пример: github.com/grpc/ grpc/blob/master/examples/python/metadata/ - person Attila123; 12.03.2020