[英]Cannot get timeout to work properly with net http in Ruby
我的 HTTP 獲取請求的超時存在問題,並嘗試了幾件事以使其正常工作但沒有成功。 這是我的get_request
function:
require 'net/http'
require 'openssl'
def get_request(url, headers = "")
uri = URI.parse(url)
request = Net::HTTP::Get.new(uri)
unless headers.empty?
headers.each { |key, value| request[key] = value }
end
if uri.port == 443
if @proxy
response = Net::HTTP.start(uri.host, uri.port, @proxy_ip, @proxy_port, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) { |http|
http.request(request)
}
else
response = Net::HTTP.start(uri.host, uri.port, :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE) { |http|
http.request(request)
}
end
else
response = Net::HTTP.start(uri.host, uri.port) { |http|
http.request(request)
}
end
if response.code.to_i == 302 or response.code.to_i == 301
get_request(response["Location"])
else
return response
end
return response
end
我試過插入:
http.read_timeout = 3
就在這些行之前:
http.request(request)
但這似乎不起作用。 腳本仍然掛起 20 多秒。
我也嘗試插入:
request.read_timeout = 3
正下方:
request = Net::HTTP::Get.new(uri)
但這仍然不起作用。 我只是希望腳本在 3 秒后停止 GET 請求,但是在方法啟動后放置一個puts "Loading get request"
行后,我注意到該請求仍然需要 10 多秒。
該建議已在多個領域發布,但似乎對我不起作用。
出於這個原因,我使用open-uri
,從來沒有遇到過問題。 下面的方法在 Tomcat 服務器上啟動程序。 響應恰好需要一些時間,具體取決於服務器上的負載。 在它有時失敗之前。
def start_sending(url)
require 'open-uri'
open(url, :read_timeout => 5 * 60) do |response|
# if there is a response it always contains "Ok" for this url
if response.read[/Return: Ok/i]
log "sending ok"
return true
else
log "error sending, no confirmation received\n#{response.read}"
return false
end
end
rescue => e
log_error("#{e.message}\n#{e.backtrace}")
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.