Как преобразовать POST-запрос cURL multipart / form-data в запрос ruby, используя rest-client? - PullRequest
0 голосов
/ 28 мая 2019

Мне нужно реализовать POST-запрос curl, указанный ниже, в Ruby, используя Rest-Client, чтобы я мог загрузить файл на свой сервер.

curl -X POST --header 'Content-Type: multipart/form-data' --header 'Accept: application/json' --header 'Authorization: Basic jhdsjhdshjhdshdhh' --header 'tenant-code:djdjhhsdsjhjsd=' {"type":"formData"} 'https://myserver.com/blobs/upload?fileName=some.ipa&groupId=098'

Я пробовал следующее -

require 'rest-client'
require 'json'

payload = {
    :multipart => true,
    :file => File.new(path_to_file, 'rb')
}

response = RestClient.post("https://myserver.com/blobs/upload?fileName=some.ipa&groupId=098", payload, {accept: :json, 'tenant-code':"djdjhhsdsjhjsd=", 'Authorization': "Basic jhdsjhdshjhdshdhh"})

Это работает нормально, так как я получаю 200 ответ от сервера. Однако, когда я проверяю загруженный файл на моем сервере, он поврежден.

Это правильный способ сделать запрос multipart / form-data с использованием ruby?

Я вижу, что в запросе cURL есть следующее, которое нигде не учитывается в запросе ruby.

{"type":"formData"}

Нужно ли для этого что-то дополнительно делать?

1 Ответ

0 голосов
/ 29 мая 2019

Я решил это для своего конкретного случая (где мне нужно было загрузить файл IPA в мой корпоративный магазин приложений), изменив запрос на следующее: -

require 'rest-client'
require 'json'

response = RestClient::Request.execute(
  :url => "https://myserver.com/blobs/upload?fileName=some.ipa&groupId=098",
  :method => :post,
  :headers => {
    'Authorization' => "Basic jhdsjhdshjhdshdhh",
    'tenant-code' => "djdjhhsdsjhjsd=",
    'Accept' => 'application/json',
    'Content-Type' => 'application/octet-stream',
    'Expect' => '100-continue'
  },
  :payload => File.open(path_to_file, "rb")
)

По сути, тип контента должен быть octet-stream и заголовок Expect также должен быть установлен.

Надеюсь, это поможет кому-то, кто ищет что-то подобное.

...