ruby RestClient per request settings

1.2k Views Asked by At

I like RestClient API very much but it looks to me that I can't configure proxy, timeouts, request hooks, ssl, etc. per request. So for example if I want to execute some requests concurrently in different threads, they may interfere between each other because I've changed some of the configuration.

Am I missing something? Is there a workaround as this seems to me a serious limitation.

Update: Actually looking at the Request class I think that only proxy configuration and before_execution_procs are global configuration. Most probably there would be workarounds possible with before_execution_procs. If you know how to set these per request, I'd be grateful.

example:

(1..10).each {
  Thread.new {
    RestClient.get(..., proxy: "some proxy", before_execution_hooks: [some, array, of, hooks])
  }
}

If I make it like:

(1..10).each {
  Thread.new {
    RestClient.proxy = "per request proxy"
    RestClient.add_before_execution_proc {...}
    RestClient.get(...)
  }
}

Then I'll end up with unknown proxy per request as well with multiple procs.

1

There are 1 best solutions below

3
On BEST ANSWER

You can now set proxy as per request options

With RestClient::Request or with RestClient::Resource which have both :proxy and :before_execution_proc options that override the global settings:

So the following code should be thread safe:

(1..10).each do
  Thread.new do
    RestClient::Resource.new(url, proxy: 'resquest specific', before_execution_proc: ...).get
    # or
    RestClient::Request.execute(method: :get, url: 'http://...', proxy: ...)
  end
end