2016-12-16 4 views
0

J'ai un script ruby ​​que j'utilise pour obtenir des informations à partir d'une page Web et mettre à jour la page. Je reçois quelques informations JSON à partir de la page Web avec:Comment faire pour tourner la requête curl avec l'utilisateur et le mot de passe dans ruby ​​NET :: HTTP pour le site https?

`curl -s -u #{username}:#{password} #{HTTPS_PAGE_URL}` 

Et puis je mets à jour la page avec:

`curl -s -u #{username}:#{password} -X PUT -H 'Content-Type: application/json' -d'#{new_page_json_info}' #{HTTPS_PAGE_URL}` 

Je veux utiliser Net::HTTP pour ce faire à la place. Comment puis-je faire ceci?

Pour référence est ici la doc de confluence que je l'habitude de créer la commande curl en premier lieu: https://developer.atlassian.com/confdev/confluence-server-rest-api/confluence-rest-api-examples

+0

https://jhawthorn.github.io/curl-to-ruby/ peut aider –

Répondre

0

Merci http://jhawthorn.github.io/curl-to-ruby Cela a résolu. Tout ce que vous avez à faire est de donner à votre site Web votre commande curl et il va le convertir en un script ruby.

Pour la première boucle (ce obtient l'information JSON d'une page et l'envoie à stdout):

#!/usr/bin/env ruby 

require 'net/http' 
require 'uri' 

uri = URI.parse("https://my.page.io/rest/api/content/") 
request = Net::HTTP::Get.new(uri) 
request.basic_auth("username", "password") 

req_options = { 
    use_ssl: uri.scheme == "https", 
} 

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| 
    http.request(request) 
end 

# response.code 
puts JSON.parse(response.body).to_hash 

Pour la deuxième (cela met à jour les informations JSON sur une page):

#!/usr/bin/env ruby 

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

uri = URI.parse("https://my.page.io/rest/api/content/") 
request = Net::HTTP::Put.new(uri) 
request.basic_auth("username", "password") 
request.content_type = "application/json" 
request.body = "{Test:blah}" 

req_options = { 
    use_ssl: uri.scheme == "https", 
} 

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| 
    http.request(request) 
end 
0

peut essayer de faire quelque chose comme:

uri = URI.parse("http://google.com/") 

http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Get.new(uri.request_uri) 
request.basic_auth("username", "password") 
+0

Im obtenir '# ' maintenant lorsque j'essaie d'obtenir le texte de la page à partir de cela. –

+0

Aussi, j'ai besoin de cela sur https –