Изменение Content-Type на JSON с использованием HTTParty - PullRequest
14 голосов
/ 27 мая 2011

Я пытаюсь использовать Ruby on Rails для связи с Salesforce API. Я могу получить данные достаточно легко, но у меня возникают проблемы с отправкой данных на сервер. Я использую HTTParty согласно сообщению Куинтона Уолла здесь:

https://github.com/quintonwall/omniauth-rails3-forcedotcom/wiki/Build-Mobile-Apps-in-the-Cloud-with-Omniauth,-Httparty-and-Force.com

но все, что я могу получить от сервера Salesforce, это ошибка, которую я отправляю в виде html

{"message" => "MediaType 'application / x-www-form-urlencoded' не поддерживается этим ресурсом", "errorCode" => "UNSUPPORTED_MEDIA_TYPE"}

ответственный код выглядит так:

require 'rubygems'
require 'httparty'

class Accounts
  include HTTParty
  format :json

  ...[set headers and root_url etc]

  def self.save
    Accounts.set_headers
    response = (post(Accounts.root_url+"/sobjects/Account/", :body => {:name => "graham"}.to_json))
  end
end

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

Любая помощь будет оценена. веселит

Ответы [ 2 ]

18 голосов
/ 15 марта 2013

Для заголовка Content-Type необходимо установить «application / json».Это можно сделать, вставив : headers => {'Content-Type' => 'application / json'} в качестве параметра post , то есть:

response = post(Accounts.root_url+"/sobjects/Account/", 
  :body => {:name => "graham"}.to_json,
  :headers => {'Content-Type' => 'application/json'} )
13 голосов
/ 27 мая 2011

Вы должны установить заголовок Content-Type на application / json. Я не использовал HTTParty, но похоже, что вы должны сделать что-то вроде

response = (post(Accounts.root_url+"/sobjects/Account/", :body => {:name => "graham"}.to_json) , :options => { :headers => { 'Content-Type' => 'application/json' } } )

Я несколько удивлен, что опция форматирования не делает это автоматически.

...