3

これが機能するのと同じ方法で実装しようとしている次のルビーコードがありますcurl

curl -X POST \
  -H "X-Parse-Application-Id: $APP_ID" \
  -H "X-Parse-REST-API-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{"score": 1337, "playerName": "Sean Plott", "cheatMode": false }' \
  https://api.parse.com/1/classes/GameScore

ルビーコードは次のとおりです。

def execute_post
  puts "executing post script.."
  payload ={
    "score" => "1337",
    "playerName" => "Sean Plott", 
    "cheatMode" => "false"

  }.to_json
  headers = {
    'X-Parse-Application-Id' => $APP_ID, 
    'X-Parse-REST-API-KEY' => $KEY,
    'Content-Type' => 'application/json'
  }
  url = "https://" + $DOMAIN + $BASE_URL + $LIST_CLASS
  uri = URI.parse(url)
  puts uri
  puts payload

  puts "***************"
  req = Net::HTTP::Post.new(uri.host, initheader = headers)
  req.body = payload
  response = Net::HTTP.new(uri.host, uri.port).start{|http| http.request(req)}

  puts "Response #{response.code} #{response.message}: #{response.body}"

end

何らかの理由でエラーが発生します。何がうまくいかないかについてのアイデアはありますか?

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/protocol.rb:135:in `sysread': end of file reached (EOFError)
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/protocol.rb:135:in `rbuf_fill'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:62:in `timeout'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/timeout.rb:93:in `timeout'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/protocol.rb:134:in `rbuf_fill'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/protocol.rb:116:in `readuntil'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/protocol.rb:126:in `readline'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:2024:in `read_status_line'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:2013:in `read_new'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1050:in `request'
    from parse_connect.rb:33:in `execute_post'
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:543:in `start'
    from parse_connect.rb:33:in `execute_post'
    from parse_connect.rb:42
4

2 に答える 2

1

このようにしてみてください:

require 'mechanize'
Mechanize.new.post url, data.to_json, headers

それが機能しない場合は、フィドラーを実行して、次のように試してください。

Mechanize.new{|a| a.set_proxy 'localhost', 8888}.post url, data.to_json, headers

次に、フィドラーでリクエストを調べます

于 2012-04-19T02:39:26.653 に答える
0

curl の例では、HTTPS を使用しています。

Net::HTTP を使用する場合は、特に HTTPS を有効にする必要があります (URL に https:// を入れるだけでは十分ではありません)。

http =  Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
response = http.start{|http| http.request(req)}
于 2012-04-19T02:48:54.997 に答える