簡體   English   中英

無法超時以在 Ruby 中使用網絡 http 正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM