Как я могу отправить этот тип строки с вызовом API

Я использую protobuf и мне нужно отправить конвертированные байты с запросом API, и мне нужно снова декодировать на сервере, строка будет выглядеть так:

\ b \ xC0 \ xB3 \ xB9 \ xDD \ xFC \ x1C \ x12XBalance, списанный с 62.0 Срок действия: 09-11-2016 09:10:00 Остаток - 1490.0\x1A\x0FDebited Balance\"XBalance, дебетованный с 62.0 Дата окончания - 09-11-2016 09:10:00 Остаток - 1490,0(\x99\x9C\xCE\xBF\x05

Как я могу отправить этот тип запроса и получить правильно на сервере?

Или кто-нибудь помочь мне отправить информацию с использованием protobuf.

Когда я отправляю строку в теле, тогда она заменяет форму

\x99\x9C\xCE\xBF\x05

в

x99x9CxCExBFx05

и при отправке в заголовках он заменяется как

\\x99\\x9C\\xCE\\xBF\\x05

Спасибо

1 ответ

Помимо того, что я написал в комментариях, рубин protobuf Обязательный дом содержит прекрасный пример того, как это должно быть достигнуто:

require 'google/protobuf'

# generated from my_proto_types.proto with protoc:
#  $ protoc --ruby_out=. my_proto_types.proto
require 'my_proto_types'

mymessage = MyTestMessage.new(:field1 => 42, :field2 => ["a", "b", "c"])
mymessage.field1 = 43
mymessage.field2.push("d")
mymessage.field3 = SubMessage.new(:foo => 100)

# ⇓⇓⇓ HERE ⇓⇓⇓
encoded_data = MyTestMessage.encode(mymessage)
# ⇑⇑⇑ HERE ⇑⇑⇑
decoded = MyTestMessage.decode(encoded_data)
assert decoded == mymessage

Все, что вам нужно, это кодировать байты перед отправкой:

mymessage = MyTestMessage.new(message: '\x99\x9C\xCE\xBF\x05')
encoded_data = MyTestMessage.encode(mymessage)
# OR encoded_data = MyTestMessage.encode_json(mymessage)

а теперь отправь encoded_data вашему получателю.

Другие вопросы по тегам