2011-07-07 45 views
1

我工作on Rails的App.I一個Ruby不得不作出一個GET請求到以下幾點:做一個GET請求和接收參數

https://[@subdomain].chargify.com/subscriptions/[@subscription.id].json

接收的響應將是JSON。我試圖用紅寶石的淨/ HTTP'庫使得GET請求來實現這一點,我的代碼如下:

res = Net::HTTP.get(URI.parse('https://[@subdomain].chargify.com/subscriptions/[@subscription_id].json')) 

但我得到一個錯誤是:

bad URI(is not URI?): https://[@subdomain].chargify.com/subscriptions/[@subscription_id].json

我不確定我究竟在哪裏犯這個錯誤。任何建議或幫助,將不勝感激。

感謝

+0

我遵循的指示,現在我的代碼讀取這樣的:@res =淨:: HTTP.get(URI.parse(「HTTPS: //#{@subdomain}.chargify.com/subscriptions/#{@sub scription_id} .json「))現在在我的視圖中,當我調試(@res)它給了我這個錯誤:--- | 400的滑動HTTP請求被髮送到HTTPS端口<體BGCOLOR = 「白色」>

400錯誤的請求

平紋HTTP請求被髮送到HTTPS端口

的nginx/0.7.66
任何想法如何解決此問題?謝謝 – user814446

回答

1

你的意思#{@subdomain}而不是[@subdomain]?這必須在雙引號"的內部才能正確插入。

+0

這樣 - Net :: HTTP.get(URI.parse(「https://#{@subdomain} .chargify.com/subscriptions /#{@subscription_id} .json」)) –

+0

是的,就是這樣。 '#{...}'將評估內容並將其轉換爲字符串,根據需要調用'.to_s'。 – tadman

1

現在你知道你的錯誤是你沒有正確插入字符串。你應該有指定#{@子域}而非[與@subdomain]你需要雙引號字符串

,你現在是你需要告訴HTTP連接使用SSL問題各地。我用的是這樣的..

http = Net::HTTP.new(uri.host, uri.port) 

http.use_ssl = true 

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

不,我沒有得到像這樣的json響應,或者可能是我做錯了。這是我的代碼: uri = URI.parse(「https://#{@subdomain} .chargify.com/subscriptions /#{@subscription_id} .json」) http = Net :: HTTP.new(uri 。主持人,uri.port) http.use_ssl =真 @res =淨:: HTTP :: Get.new(uri.request_uri) 這裏是我現在得到的錯誤: ---!紅寶石/對象:網:: HTTP ::獲取 體: body_stream: 頭: 接受: - 「*/*」 方法:GET 路徑:/subscriptions/660668.json request_has_body:假 response_has_body:true 現在不確定是什麼原因造成的? – user814446

+0

愚蠢的問題(對不起),但你打電話@ res.response.body?這裏有點晚了,所以我的想法很模糊,所以也許這就是你的意思。 –

0

兩件事情:

  1. 與@subdomain的值需要使用

    #{@subdomain} 
    
  2. 連接傳遞是SSL

    def net_http(uri) 
    h = Net::HTTP.new(uri.host, uri.port) 
    h.use_ssl=true 
         h 
    end 
    

然後

 request=net_http(URI.parse("https://#  {@subdomain}.chargify.com/subscriptions/#{@subscription_id}.json")) 

要執行的動作得到

 request=net_http(URI.parse("https://#  {@subdomain}.chargify.com/subscriptions/#{@subscription_id}.json")).start do |http| 
     http.get(URI.parse("whatever_url").path,{:params=>123}) 
     end 
相關問題