Преобразование командной строки Curl в Rails

Это моя команда curl, которая прекрасно работает в командной строке:

curl --data @order_new.json \
     -H "X-Augury-Token:My_token_goes_here" \
     -H "Content-Type:application/json" \
     http://staging.hub.spreecommerce.com/api/stores/store_id_goes_here/messages

Мне нужно реализовать то же самое в рельсах, используя любой Gem, пробовал с HTTParty / rest_client / spree-api-client, но здесь что-то не так:

require 'httparty'

result = HTTParty.post(
        "http://staging.hub.spreecommerce.com/api/stores/52eb347f755b1c97e900001e/messages",
        :body => JSON.parse(File.read("order_new.json")),
        :header => {
           "X-Augury-Token" => "UjjKsdxbrwjpAPx9Hiw4",
           "Content-Type" => "application/json" 
        }
)

Но я получаю ошибку,

"The page you were looking for doesn't exist (404)"

Мне нужен рельс, эквивалентный приведенной выше команде curl, использование гем spree-api-client будет очень полезным.


person Ajay    schedule 06.02.2014    source источник
comment
Curl выполняет запрос на получение, а http-участник отправляет запрос на публикацию.   -  person andHapp    schedule 06.02.2014
comment
Я сомневаюсь, что @andHapp, команда curl отправляет параметр --data, поэтому это должен быть запрос POST, а не запрос GET.   -  person Jaap Haagmans    schedule 06.02.2014
comment
Ах да ... извините, пропустил!   -  person andHapp    schedule 06.02.2014


Ответы (2)


Если вы предпочитаете использовать Spree::API::Client, не могли бы вы опубликовать результаты своих исследований? Не могли бы вы оценить результат выполнения следующих команд и опубликовать ответ:

client = Spree::API::Client.new('http://staging.hub.spreecommerce.com/api/', 'UjjKsdxbrwjpAPx9Hiw4')
client.products.inspect
person Jaap Haagmans    schedule 06.02.2014
comment
Я уже видел такое в ссылке на github, но как я могу передать атрибуты -header, -data, как это делает curl. - person Ajay; 06.02.2014
comment
Тебе не нужно. Этот драгоценный камень не является заменой команды curl, это клиент, который вы можете использовать для связи с spree. Если вы пытаетесь создать заказ, вы сможете сделать это с помощью client.create_order(data). Взгляните на код, чтобы понять, что происходит: github.com/andrew/spree-api-client/blob/master/lib/, github.com/andrew/spree-api-client/blob/master/lib/ и github.com/andrew/spree-api-client/ blob / master / lib / - person Jaap Haagmans; 06.02.2014
comment
Да, я понял вашу точку зрения, используя client.create_order (data), мы можем create_order в нашем магазине (spree), но он не передает никаких сообщений в хаб явно. но, согласно моему вопросу, мне нужно передать подобное уведомление на мой хаб (staging.hub.spreecommerce.com/)! :) - person Ajay; 06.02.2014
comment
Ах, прости. Я не знаком с центром Spreecommerce, но изучил его. Разве это не просто то, что вы ищете? github.com/spree/spree_hub_connector - person Jaap Haagmans; 06.02.2014

require 'httparty'

result = HTTParty.post(
        "http://staging.hub.spreecommerce.com/api/stores/52eb347f755b1c97e900001e/messages",
        :body => @order.to_json,
        :header => {
           "X-Augury-Token" => "UjjKsdxbrwjpAPx9Hiw4",
           "Content-Type" => "application/json" 
        }
)

Не анализируйте json при переходе к телу HTTParty

person Anil Maurya    schedule 06.02.2014
comment
GOT ERROR: NoMethodError: undefined метод `json 'для nil: NilClass Давайте забудем о добавлении файла .json в качестве входных данных. Можем ли мы передать объект в раздел: body? Например: body = ›Order.last? - person Ajay; 06.02.2014
comment
вам нужно передать json в теле, поэтому загрузите порядок в \ @order и напишите \ @ order.to_json - person Anil Maurya; 06.02.2014