0

嘗試運行在Rails中轉換爲Net :: HTTP的curl命令時收到以下錯誤。當我在客戶端使用AJAX運行它時,url + params給了我預期的響應,但是當然這暴露了我的API密鑰。將curl上的rails錯誤轉換爲Net :: HTTP

任何想法爲什麼會發生此錯誤?

錯誤:

undefined method `empty?' for #<URI::HTTPS:0x00000006552fe8> 

捲曲:

curl -X POST -d "maxRetrieve=1" -d "outputMode=json" -d "url=https://www.whitehouse.gov/the-press-office/2016/03/19/weekly-address-president-obamas-supreme-court-nomination" "https://gateway-a.watsonplatform.net/calls/url/URLGetRelations?apikey=ABC123" 

Rails代碼:

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

url = "https://gateway-a.watsonplatform.net/calls/url/URLGetRelations?apikey=ABC123" 
encoded_url = URI.encode(url) 
uri = URI.parse(encoded_url) 
request = Net::HTTP::Post.new(uri) 
request.set_form_data(
    "maxRetrieve" => "1", 
    "outputMode" => "json", 
    "url" => "https://www.whitehouse.gov/the-press-office/2016/03/19/weekly-address-president-obamas-supreme-court-nomination", 
) 

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http| 
    http.request(request) 
end 
puts response 

回答

1

看起來你正在使用的紅寶石v1.9.3所以我在改寫你的代碼以下方式:

uri = URI.parse("https://gateway-a.watsonplatform.net/calls/url/URLGetRelations?apikey=ABC123") 
args = { 
     "maxRetrieve" => "1", 
     "outputMode" => "json", 
     "url" => "https://www.whitehouse.gov/the-press-office/2016/03/19/weekly-address-president-obamas-supreme-court-nomination", 
} 

uri.query = URI.encode_www_form(args) 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 

request = Net::HTTP::Get.new(uri.request_uri) 

response = http.request(request) 
puts response.body 
+0

謝謝。這是我的一個錯字。無論如何使用:「request = Net :: HTTP :: Get.new(uri)」或「request = Net :: HTTP :: Post.new(uri)」我收到相同的錯誤。 – JeffA

+0

謝謝。你絕對指出我正確的方向。請注意,我必須將api鍵移到參數上才能真正實現它。 – JeffA