2017-01-03 2 views
0

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

\ б \ xC0 \ xB3 \ xB9 \ xDD \ xFC \ x1C \ x12XБаланс, дебетованный с 62.0 Дата истечения срока 09-11-2016 09:10:00 Оставшийся остаток равен 1490.0 \ x1A \ x0FDebited Balance \ "XBalance дебетуется с 62.0 Дата истечения срока 09- 11-2016 9:10:00 Оставаясь Баланс 1490,0 (\ x99 \ x9C \ xCE \ XBF \ X05

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

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

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

\x99\x9C\xCE\xBF\x05 

в

x99x9CxCExBFx05 

и когда отправить в заголовках он замененные как

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

Благодарности

+0

Если вы хотите точно такую ​​же строку на сервере, используйте 'base64'. – mudasobwa

+0

Вы имеете в виду необходимость кодировать это в base64 сначала, а затем отправлять на сервер и декодировать там? – Thorin

+0

Я пошел бы так, да. Это самый простой и безопасный. – mudasobwa

ответ

0

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

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 к получателю ,

+0

Да, я вижу этот пример, но строка будет сгенерирована с стороны android и придет к ruby ​​с вызовом api, поэтому мне нужно отправить строку – Thorin

+0

'MyTestMessage.encode (mymessage)' производит строку, не так ли? – mudasobwa

+0

да, он создает строку, как я добавил в моем вопросе, и декодирование работает, но проблема в том, что когда я отправляю ту же строку с api, которая не может получить то же самое на рубиновой стороне – Thorin

Смежные вопросы