Шеф-повару Руби нужна помощь в создании вызова API с заголовками, прокси, https - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь запустить API-вызов New Relic, чтобы получить список всех мониторов Synthetics.У меня проблемы с тем, чтобы это сработало, и я просто застрял ... пытался посмотреть на многие рубиновые ссылки, но я просто не понимаю, поэтому я надеюсь, что вы, ребята, могли бы помочь мне!

Для этого требуется HTTPS, проксии заголовки аутентификации:

Chef::Log.info('Retrieving New Relic Synthetics monitors')
uri = URI("https://synthetics.newrelic.com/synthetics/api/v3/monitors")
uri.headers = "x-api-key:<my_key_here>"
proxy_addr = "192.168.0.100"
proxy_port = "3200"

begin
  tries ||= 3
  response = JSON.parse(Net::HTTP.new(uri.host, uri.port, proxy_addr, proxy_port, :use_ssl => uri.scheme == 'https') { |http|
    request = Net::HTTP::Get.new uri
    response = http.request request
  })

  raise 'ERROR: Unable to retrieve New Relic Synthetics monitors' unless response['monitors'] 
  all_synthetics_monitors = response
rescue
  if (tries -= 1) > 0
    Chef::Log.warn("Retrieving New Relic Synthetics monitors: [#{uri}].. Retrying!\n")
    sleep(10)
    retry
  else
    Chef::Log.error("Retrieving New Relic Synthetics monitors: [#{uri}].. Failed!\n")
    return
  end
end.flatten

Пока что я просто получаю повторы и не могу понять даже, что этот API передает.Я пытался выполнить «путы» вокруг запроса и ответа, но не смог продвинуться далеко ...

1 Ответ

0 голосов
/ 30 ноября 2018

Разобрался!

Пришлось использовать Net::HTTP.new вместо Net::HTTP.get:

    uri = URI.parse('https://synthetics.newrelic.com/synthetics/api/v3/monitors')

begin
  tries ||= 3

  proxy_ipaddress = "192.168.0.100"
  proxy_port = "3200"

  proxy_uri = URI.parse("http://#{proxy_ipaddress}:#{proxy_port}")

  http = Net::HTTP.new(uri.host, uri.port, proxy_uri.host, proxy_uri.port)
  http.use_ssl = true
  request = Net::HTTP::Get.new(uri.request_uri)
  request["x-api-key"] = "<insert_your_API_key_here>"

  response = http.request(request)
  all_running_synthetics_scripts = response.body.to_json

  # Finish HTTP connection. -- Find out if this is necessary or not
  http.finish if http.started?

 raise "ERROR: Unable to retrieve New Relic Synthetics monitors, got http code #{response.response.code.to_i}" unless response.response.code.to_i == 200

rescue
  if (tries -= 1) > 0
    puts("Retrieving New Relic Synthetics monitors: [#{uri}].. Retrying!\n")
    sleep(10)
    retry
  else
    puts("Retrieving New Relic Synthetics monitors: [#{uri}].. Failed!\n")
    return
  end
end
...