2011-12-05 5 views
1

Like describe in API Goo.glGoo.glのNet :: Httpでヘッダーを設定する方法サービスを短縮しますか?完全

てmanualyカール作品:

curl https://www.googleapis.com/urlshortener/v1/url \ 
    -H 'Content-Type: application/json' \ 
    -d '{"longUrl": "http://www.rubyinside.com/"}' 

富栄私はネット:: HTTPではこれを作ってみる:

require "net/https" 
require "uri" 
uri = URI.parse("https://www.googleapis.com/urlshortener/v1/url") 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 
http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
request = Net::HTTP::Post.new(uri.path) 
request["Content-Type"] = "application/json" 
request.set_form_data({"longUrl" => "http://www.rubyinside.com/"}) 
response = http.request(request) 
puts response.body 

をしかし、応答で失敗:

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "parseError", 
    "message": "This API does not support parsing form-encoded input." 
    } 
    ], 
    "code": 400, 
    "message": "This API does not support parsing form-encoded input." 
} 
} 
=> nil 

I see an another issue but seem does not work

This httparty sample code work but i want use net_http

答えて

5

あなたがやろうとしているとしてエンコード形式ではない、JSONとしてあなたのデータを送信する必要があります。

この質問に答えるには、ネットへのリンクがあります。次のようにコードを変更してください:

.... 
require 'json' 

.... 
request.body = {"longUrl" => "http://www.rubyinside.com/"}.to_json 
1

Rubyは私のフィールドではありませんが、最近C#で同様のことをしました。 Ruby-Doc.orgの方法によると、.set_form_dataはコンテンツタイプのヘッダーを "application/x-www-form-urlencoded"に設定します。これはJSONに設定されています。

Fiddler2のようなツールは、何が起こっていたのか解読に大きな助けとなりました。 HTTP JSONの例https://stackoverflow.com/a/2037621/15710

関連する問題