ruby 中restclient怎么设定超时时间和捕获超时异常

先吐槽一下百度,就是个坑,翻遍了百度都没翻到答案,还好谷歌给力。

有两个方法,第一:绕过restclient直接使用原生方法:

RestClient::Request.execute(:method => :post, :url => @url, :timeout => 90000000)

这样做的好处是不用重写restclient整个模块,可以直接使用,但我比较喜欢第二种方法,那就是重写restclient这个模块,代码如下:

require ‘net/http‘

require ‘openssl‘

require ‘stringio‘

require ‘uri‘

require ‘zlib‘

require ‘restclient‘

Timeout_vaule = 30

OpenTimeout_vaule = 30

module RestClient2

# include RestClient

def self.get(url, headers={}, &block)

RestClient::Request.execute(:method => :get, :url => url, :headers => headers, :timeout =>Timeout_vaule,:open_timeout =>OpenTimeout_vaule, &block)

end

def self.post(url, payload, headers={}, &block)

RestClient::Request.execute(:method => :post, :url => url, :payload => payload, :headers => headers,:timeout =>Timeout_vaule,:open_timeout =>OpenTimeout_vaule, &block)

end

def self.patch(url, payload, headers={}, &block)

RestClient::Request.execute(:method => :patch, :url => url, :payload => payload, :headers => headers,:timeout =>Timeout_vaule,:open_timeout =>OpenTimeout_vaule, &block)

end

def self.put(url, payload, headers={}, &block)

RestClient::Request.execute(:method => :put, :url => url, :payload => payload, :headers => headers,:timeout =>Timeout_vaule,:open_timeout =>OpenTimeout_vaule, &block)

end

def self.delete(url, headers={}, &block)

RestClient::Request.execute(:method => :delete, :url => url, :headers => headers,:timeout =>Timeout_vaule,:open_timeout =>OpenTimeout_vaule, &block)

end

def self.head(url, headers={}, &block)

RestClient::Request.execute(:method => :head, :url => url, :headers => headers,:timeout =>Timeout_vaule,:open_timeout =>OpenTimeout_vaule, &block)

end

def self.options(url, headers={}, &block)

RestClient::Request.execute(:method => :options, :url => url, :headers => headers,:timeout =>Timeout_vaule,:open_timeout =>OpenTimeout_vaule, &block)

end

end

这样就可以直接如同使用原生的restclient一样去使用它,不过这样的话ruby自带的timeout这个东西就不太好使了,虽然原本就没好使过,所以需要捕获的异常就变成了:RestClient::RequestTimeout

当然,这个异常可能有其他捕获办法,但这个定位好像挺准的,所以就用这个了

时间: 2024-10-17 03:12:44

ruby 中restclient怎么设定超时时间和捕获超时异常的相关文章

httpclient: 设置请求的超时时间,连接超时时间等

public static void main(String[] args) throws Exception{ //创建httpclient CloseableHttpClient httpClient = HttpClients.createDefault(); //创建http get HttpGet httpGet = new HttpGet("http://www.taotao.com/"); //构建超时等配置信息 RequestConfig config = Reques

redis基本操作,基于StringRedisTemplate,存储,取值,设置超时时间,获取超时时间,插入list操作

@Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping("/test") void test() { stringRedisTemplate.opsForValue().set("liuqi", "13221050705", 15, TimeUnit.MINUTES); String str1 = stringRedisTemplate.opsForValue

新功能:阿里云负载均衡SLB支持HTTP/HTTPS超时时间自定义功能

摘要: 大家好,很高兴的告诉大家,阿里云负载均衡SLB已经在新加坡.澳大利亚(悉尼).马来西亚(吉隆坡).日本(东京).美国(硅谷).美国(弗吉尼亚).德国(法兰克福).阿联酋(迪拜).印度(孟买)上述地域支持HTTP/HTTPS超时时间自定义功能(增加黑名单),国内地域也即将上线. 1. Greeting 大家好,很高兴的告诉大家,阿里云负载均衡SLB已经在新加坡.澳大利亚(悉尼).马来西亚(吉隆坡).日本(东京).美国(硅谷).美国(弗吉尼亚).德国(法兰克福).阿联酋(迪拜).印度(孟买)

python设定并获取默认的套接字超时时间

当需要处理socket库某些属性的默认值,例如套接字超时时间.你可以创建一个套接字对象实例,调用settimeout()法设定一个超时时间,在调用gettimeout()方法获取默认的超时时间,.这种操作在开发服务器应用时很有用. 技术点解析: 1.定义socket_timeout()函数,注意函数缩进格式. 2.socket库中的类函数创建一个套接字对象 使用socket.socket(socket.AF_INET,socket.SOCK_STREAM)首先创建了一个套接字对象socket()

RMI 连接超时时间设定

System.setProperty("sun.rmi.transport.tcp.responseTimeout", "2000"); System.setProperty("sun.rmi.transport.tcp.readTimeout", "2000"); System.setProperty("sun.rmi.transport.connectionTimeout", "2000&qu

Python网络编程——设定并获取默认的套接字超时时间

Sometimes,you need to manipulate the default values of certain properties of a socket library, for example, the socket timeout. 设定并获取默认的套接字超时时间. 1.代码 1 import socket 2 3 4 def test_socket_timeout(): 5 s = socket.socket(socket.AF_INET, socket.SOCK_STR

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

我在玩webservice中遇到这个问题,情况是:(.net4.0)之前用的是好的,更新系统后出错.vs运行是好的,IIS运行出错..net底层抛错.换成.net2.0后完美运行.所以.net4.0出问题. ========================================================================================================= (转) 问题解决方法: 解决办法 1.在代码里面,把未关闭的连接关闭 2.扩大共

C# 给某个方法设定执行超时时间 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)

在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死. 在这时.我们可以通过Thread.Thread + Invoke(UI)或者是 delegate.BeginInvoke 来避免界面假死, 但是这样做时,某些代码或者是某个方法的执行超时的时间还是无法操控的.那么我们又是否有一种比较通用的方法.来设定某一个方法的执行超时的时间,让该其一旦超过指定时间则跳出指定方法.进而继续向下执行呢? 答案当然是肯定的. delegate.BeginInvoke可以实现代

[bug]超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

引言 自己弄了一个小项目——日程管理系统,在初始化日期时,查询了数据库,每个日期就会查询一次数据库,就导致了这个问题. 问题 出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the