18

RubyonRailsを使用してSalesforceAPIと通信しようとしています。データを簡単に取得できますが、サーバーへのデータの投稿に問題があります。Quinton Wallの投稿に従って、HTTPartyを使用しています。

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

しかし、セールスフォースサーバーから取得できるように見えるのは、本文をhtmlとして送信しているというエラーだけです。

{"message" => "MediaType of'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になるようにこれを変更する方法を知っている人はいますか?

どんな助けでもいただければ幸いです。乾杯

4

2 に答える 2

22

Content-Typeヘッダーは「application/json」に設定する必要があります。これは、投稿するパラメーターとして:headers => {'Content-Type' =>'application / json'}を挿入することで実行できます。つまり、次のようになります。

response = post(Accounts.root_url+"/sobjects/Account/", 
  :body => {:name => "graham"}.to_json,
  :headers => {'Content-Type' => 'application/json'} )
于 2013-03-15T03:57:54.970 に答える
15

Content-Typeヘッダーをapplication/jsonに設定する必要があります。私はHTTPartyを使用していませんが、次のようなことをしなければならないようです。

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

formatオプションがこれを自動的に行わないことに少し驚いています。

于 2011-05-27T16:53:20.923 に答える