отправка файла protobufs в конечную точку API - PullRequest
0 голосов
/ 25 октября 2019

поэтому у меня есть конечная точка API, которая должна получать bin-файлы protobufs. он написан на C # и использует protobufs-net.

, когда я пытаюсь отправить файл на эту конечную точку, я получаю следующую ошибку:

RUnexpected end-group in source data; this usually means the source data is corrupt

я попробовал следующие запросы (декодированные из файла bin):

POST /api/protobufs HTTP/1.1
Host: xyz
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-protobuf
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 3555

1 {
  1: "4f81b7bb-d8bd-e911-9c1f-06ec640006bb"
  2: 0x404104bc4ed047ac
  3: 0x4049c4fee8a8cb66
  4: 0x40400000
  5 {
    1: "53f8afde-04c6-e811-910e-4622e9d1766e"
    2 {
      1: "e993fba0-8fc9-e811-9c15-06ec640006bb"
    }
    2 {
      1: "9a7c7210-3aca-e811-9c15-06ec640006bb"
      2: 1
    }
    2 {
      1: "2d7d12f1-2bc9-e811-9c15-06ec640006bb"
    }
    3: 18446744073709551615
  }
  6: 159
  7: 1571059251000
}
1 {
  1: "4f81b7bb-d8bd-e911-9c1f-06ec640006bb"
  2: 0x404104d746a35280
  3: 0x4049c5125c231685
  4: 0x40400000
  5 {
    1: "53f8afde-04c6-e811-910e-4622e9d1766e"
    2 {
      1: "e993fba0-8fc9-e811-9c15-06ec640006bb"
    }
    2 {
      1: "9a7c7210-3aca-e811-9c15-06ec640006bb"
      2: 1
    }
    2 {
      1: "2d7d12f1-2bc9-e811-9c15-06ec640006bb"
    }
    3: 18446744073709551615
  }
  6: 95
  7: 1571059255000
}

, и когда я пытаюсь загрузить сам файл bin, я получаю следующую ошибку:


Invalid wire-type; this usually means you have over-written a file without truncating or setting the length; see https://stackoverflow.com/q/2152978/23354

запрос:

POST /api/protobufs HTTP/1.1
Host: xyz
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: application/x-protobuf,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/octet-stream
Upgrade-Insecure-Requests: 1
Content-Length: 2029


õ
$4f81b7bb-d8bd-e911-9c1f-06ec640006bb ¬GÐN¼ A@ f˨èþÄI@%��@@*«
$53f8afde-04c6-e811-910e-4622e9d1766e &
$e993fba0-8fc9-e811-9c15-06ec640006bb (
$9a7c7210-3aca-e811-9c15-06ec640006bb &
$2d7d12f1-2bc9-e811-9c15-06ec640006bb ÿÿÿÿÿÿÿÿÿ 0Ÿ 8¸î¶ÓÜ-

Я пытался с типом содержимого application/x-protobuf, а также application/octet-stream

Я правильно отправляю? как я могу отправить файл. (я использовал отрыжку для этой части)

1 Ответ

1 голос
/ 25 октября 2019

Я попробовал следующие запросы (декодированные из файла bin)

Я подозреваю, что проблема в скобках - проблема. Это protoc понятный человеку вывод консоли, который существует только для того, чтобы помочь вам понять , что находится в полезной нагрузке protobuf;это на самом деле не протобуф. Protobuf - это нечитаемый двоичный фрагмент, который у вас был ранее.

Из предыдущего вопроса кажется, что вы пытаетесь редактировать содержимое полезной нагрузки protobuf. Для этого обычно используется следующий процесс:

  1. Получите схему .proto (или перепроектируйте ее из предыдущего вопроса)
  2. Используйте соответствующий инструмент, чтобы включить .protoСхема (# 1) в код, который представляет модель на выбранном вами языке / каркасе
  3. Десериализовать полезную нагрузку, используя модель (# 2), в некоторый граф объектов, который представляет собой данные
  4. МутироватьГраф объектов из (# 3)
  5. Сериализует граф измененных объектов (# 4), используя модель (# 2)

Затем вы должны загрузить двоичный файл из # 5

Некоторые библиотеки и платформы позволяют пропустить шаги 1 и 2, используя подход «сначала код» для определения модели, но результаты совпадают.

...