6

私は譲ります - 私は何時間もこのナットを割ろうとしましたが、それを理解することはできません. 私は Ruby に慣れていないので (そして Python のバックグラウンドがありません!)、これを翻訳してから、ユーザー/パスを必要とするサイトに JSON データを投稿し、応答データを取得することはできません。

これは Python コードです。

r = requests.post('https://keychain.oneid.com/validate/', json.dumps(data), auth=('username', 'password'))
r.json()

どこにdataある:

{"some" => "data", "fun" => "times"}

Rails アプリケーションで使用するために、このコードの機能を Ruby で複製しようとしていますが、Pythonrequests.post()関数がどのように動作するかを理解してから、POST および GET 用の Ruby コードを作成するまでの間、完全に迷ってしまいました。

Net::HTTP を試してみましたが、ユーザー名/パスを本体に入れるか、メソッドを使用するかが明確ではありませbasic_authん。 JSON ですが、この時点で完全にランチに出かけることができます。basic_authNet::HTTP.get

どんな提案や助けも大歓迎です!

4

2 に答える 2

16

rest-client gemを使用するか、単にNet::HTTP.

Ruby コード (バージョン 1.9.3):

require 'net/http'
require 'json'
require 'uri'

uri = URI('https://keychain.oneid.com/validate/')
req = Net::HTTP::Post.new uri.path
# ruby 2.0: req = Net::HTTP::Post.new uri
req.basic_auth 'username', 'password'
req.body = {:some => 'data', :fun => 'times'}.to_json

res = Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  http.ssl_version = :SSLv3
  http.request req
end

puts res.body
# => {"errorcode": -99, "error": "Invalid API credentials. Please verify and try again"}

json = JSON.parse res.body
puts json['errorcode']
# => -99
于 2013-05-10T05:07:51.077 に答える
3

RestClient gemをご覧になることをお勧めします。これにより、GET/POST と残りのすべての REST 呼び出しを簡単に処理できます。またrestclient、コマンド ラインから使用できる IRB ベースのシェルが呼び出されるため、接続設定を簡単に試すことができます。

ドキュメントから:

RestClient.post "http://example.com/resource", { 'x' => 1 }.to_json, :content_type => :json, :accept => :json

これを見ると、Python コードとの類似点がわかります。

認証情報をハッシュに追加できます。

require 'restclient'
require 'json'
require 'base64'

RestClient.post(
  'https://keychain.oneid.com/validate/',
  {
    :authentication => 'Basic ' + Base64.encode64(name + ':' + password),
    'some' => 'data',
    'fun' => 'times'
  }.to_json,
  :content_type => :json,
  :accept => :json
)

または、 Curb gemを使用することもできます。Curb は、Web 接続用の業界標準ツールである libcurl を使用しました。ドキュメントには、POST リクエストを送信するいくつかの方法が示されています。

于 2013-05-10T04:21:10.157 に答える