2011-10-17 17 views
8

我需要一個應用程序來阻止HTTP請求,所以我不得不添加幾行代碼,唯一我無法弄清楚的是聲明if uri.scheme == 'https'; http.use_ssl = true是有辦法,我可以設置HTTP/HTTPS在當前語句:Ruby:阻止HTTP.new.start和動態HTTP(S)

Net::HTTP.new(uri.host, uri.port).start do |http| 

    # Causes and IOError... 
    if uri.scheme == 'https' 
    http.use_ssl = true 
    end 

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

補充:IOError: use_ssl value changed, but session already started

回答

18

the documentation,開始會話後您不能撥打use_ssl=(即之後start)。你之前設置它,例如:

http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true if uri.scheme == 'https' 

http.start do |h| 
    h.request Net::HTTP::Get.new(uri.request_uri) 
end 
4

嘗試更改您的代碼

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

if uri.scheme =='https' 
    http.use_ssl = true 
end 

http.start do 
    request = Net::HTTP::Get.new(uri.request_uri) 
    puts http.request(request) 
end 
+0

一個錯誤,而這裏寫代碼...這將不會導致一個IOError –

+0

你沒有提到任何IOErrors,@JordonBedwell。你有沒有忽略你的問題的一些細節? –

+0

@Jordan不,我沒有遺漏任何細節,代碼評論說「#原因和IO錯誤...」,並且在我詳細闡述它之前很久,這個問題也應該強調這個問題。 –