2

ここ数日、その問題について頭を悩ませていたので、どこを掘ればいいのかわからないので、誰かが助けてくれることを願っています。タイトルが示すように、認証に omniauth google oauth2 を使用するプロジェクトに取り組んでいます。この部分は最初からうまく機能します。次の部分は、Google 連絡先 API で連絡先を作成することですが、機能しません。

生成する xml/atom は少し重いので、xml ビューを使用し、render_to_string を使用してコントローラーで取得することにしました。私はレールについてよく知らないので、そのように生成する方がきれいだと思いました。これはうまくいきます。

だからここに私のoauth2呼び出しがあります:

strxml = render_to_string( :partial => 'createInGoogle', :layout => false )
response = access_token.post('/m8/feeds/contacts/default/full', params: {:body => strxml, :header => 'Content-type: application/atom+xml;GData-Version: 3.0'})

その呼び出しをデバッグすると、生成された URL が次のように見えることがわかります

"https://www.google.com/m8/feeds/contacts/default/full?body=%3Catom%3Aentry+xmlns%3Aatom%3D%27http%3A%2F%2Fwww.w3.org%2F2005%2FAtom%27+xmlns%3Agd%3D%27http%3A%2F%2Fschemas.google.com%2Fg%2F2005%27%3E%0A%3Catom%3Acategory+scheme%3D%27http%3A%2F%2Fschemas.google.com%2Fg%2F2005%23kind%27+term%3D%27http%3A%2F%2Fschemas.google.com%2Fcontact%2F2008%23contact%27%2F%3E%0A%3Cgd%3Aname%3E%0A%3Cgd%3AgivenName%3EPhilippe+Henri+Raymond%3C%2Fgd%3AgivenName%3E%0A%3Cgd%3AfamilyName%3EMichel+%3C%2Fgd%3AfamilyName%3E%0A%3Cgd%3AfullName%3EPhilippe+Henri+Raymond+Michel+%3C%2Fgd%3AfullName%3E%0A%3C%2Fgd%3Aname%3E%0A%3Catom%3Acontent+type%3D%27text%27%3ENotes%3C%2Fatom%3Acontent%3E%0A%3Cgd%3Aemail+rel%3D%27http%3A%2F%2Fschemas.google.com%2Fg%2F2005%23work%27+primary%3D%27true%27+address%3D%27fifoooo%40gmail.com%27+displayName%3D%27Philippe+Henri+Raymond+Michel+%27%2F%3E%0A+++++++++++++++++++++++++++++++++++++%C3%A9%0A%3Cgd%3AphoneNumber+rel%3D%27http%3A%2F%2Fschemas.google.com%2Fg%2F2005%23work%27+primary%3D%27true%27%3E%0A04442453369%0A%3C%2Fgd%3AphoneNumber%3E%0A%3Cgd%3AphoneNumber+rel%3D%27http%3A%2F%2Fschemas.google.com%2Fg%2F2005%23work%27+primary%3D%27true%27%3E%0A%2B33662473369%0A%3C%2Fgd%3AphoneNumber%3E%0A%3Cgd%3AstructuredPostalAddress+rel%3D%27http%3A%2F%2Fschemas.google.com%2Fg%2F2005%23work%27+primary%3D%27true%27%3E%0A%3Cgd%3Acity%3ESausset+les+pins%3C%2Fgd%3Acity%3E%0A%3Cgd%3Astreet%3E9+Avenue+G%C3%A9n%C3%A9ral+de+Gaulle+%3C%2Fgd%3Astreet%3E%0A%3Cgd%3Apostcode%3E13960%3C%2Fgd%3Apostcode%3E%0A%3Cgd%3AformattedAddress%3E%0A9+Avenue+G%C3%A9n%C3%A9ral+de+Gaulle++13960+Sausset+les+pins%0A%3C%2Fgd%3AformattedAddress%3E%0A%3C%2Fgd%3AstructuredPostalAddress%3E%0A%3C%2Fatom%3Aentry%3E&header=Content-type%3A+application%2Fatom%2Bxml%3B+GData-Version%3A+3.0"

ご覧のとおり、gem が私の xml をどのようにフォーマットするかについて確かに問題があります..そして、デバッガーで見つけた応答が来ます

Content-Type application/x-www-form-urlencoded は有効な入力タイプではありません。

xml の書式設定に問題があるか、コンテンツ タイプが間違っている可能性があります。

4

1 に答える 1

0

これを呼び出す正しい方法は次のとおりです。

strxml = render_to_string( :partial => 'createInGoogle', :layout => false )
response = access_token.post('/m8/feeds/contacts/default/full', {:body => strxml, :header => {'Content-type' => 'application/atom+xml;GData-Version: 3.0'}})
于 2012-06-20T10:02:14.377 に答える