Как делать просьбу HTTP POST с Руби?

Я нуждаюсь в том, чтобы сделать просьбу POST в API Google в унифицированный указатель ресурса:

https://www.google.com/recaptcha/api/siteverify?secret=ACA_LA_CLAVE&remoteip=IP&response=KEY_RESPONSE

Мне хотелось бы делать это, не используя специфического драгоценного камня для этой API GOOGLE а формы, самой близкой к тому, что он приносит Ruby 2.2.0 по умолчанию, того, чтобы быть возможным.

18
задан 30.08.2016, 13:35
3 ответа

Он вышел у меня, делая следующее, но я не знаю, хорошая практика ли это:

require 'uri'
require 'net/http'
require 'openssl'

recaptcha_url = "https://www.google.com/recaptcha/api/siteverify"
remoteip = request.remote_ip
uri = URI(recaptcha_url)
options = { 
    :secret => ENV["SECRET_KEY_CAPTCHA"], 
    :remoteip => request.env["REMOTE_ADDR"], 
    :response => user_response 
}
response = Net::HTTP.post_form(URI.parse(recaptcha_url), options)
puts("Body: #{response.body}")

#then parse the json response in the above 'response' variable and check whether
#the API returns a success or failure and return true or false depending on it
#logger.info "------status ==> #{response.body}"
hash = JSON.parse(response.body)
hash["success"] == true ? true : false
10
ответ дан 01.12.2019, 08:18
  • 1
    Она и #250; ltima линия - очень мало ruby, hash["success"] == true ? true : false - эквивалентный hash["success"]. С другой стороны, вместо puts в стадии строительства в ruby тебе следует использовать p. Оставшаяся часть, кажется, очень хорошо:). – eloyesp 09.11.2015, 15:36
  • 2
    Это хороший ответ. Это и #250; nico, имей в виду, что в POO и прежде всего, ли сделаешь ты вызовы http с нескольких классов, тебе интересно создавать класс HttpService или сходно, чтобы это герметизировать в корпусе и избавлять c и # 243; я говорю в общем. – Puce 01.12.2015, 19:06
  • 3
    @matiasmasca быть и # 237; в хороший, что ты пометил ее как получающий ответ, если est и # 225; s согласно ей. – eloyesp 15.04.2016, 04:03

Хотя в конце концов он закончит тем, что использует cURL , это рукописный шрифт, использованный, чтобы делать post в Ruby, помнит что конфигурирует твои верительные грамоты и тип содержимого:

  full_url = "https://www.google.com/recaptcha/api/siteverify?secret=ACA_LA_CLAVE&remoteip=IP&response=KEY_RESPONSE"    
    uri = URI.parse(full_url)
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    headers = {'Content-Type' => "application/json", 'Accept-Encoding'=> "gzip,deflate",'Accept' => "application/json" }
    request = Net::HTTP::Post.new(uri.request_uri, headers)
    request.body = {'credentials' => {'username' => 'jorgesys', 'key' => 'bombonica'}}
    response = http.request(request)
4
ответ дан 01.12.2019, 08:18

Ты можешь использовать ее nice_http gem, что ты simplificarГЎ процесс: https://github.com/MarioRuiz/nice_http

require 'nice_htpp'

http = NiceHttp.new('https://www.google.com/')

req = {
  path: '/recaptcha/api/siteverify',
  data: {
    secret: 'ACA_LA_CLAVE',
    remoteip: 'IP',
    response: 'KEY_RESPONSE'
  }
}

resp = http.post req
1
ответ дан 01.12.2019, 08:18