如何使用 RestClient 包装每个请求以使用 :verify_ssl => false?

How can I wrap every request with RestClient to use :verify_ssl => false?

我正在尝试

RestClient.add_before_execution_proc do |req, params|
  req(:verify_ssl => false)
end

它不起作用。

如何使用 RestClient 包装每个请求以使用 :verify_ssl => false?

使用 params 而不是 req。这些参数将传递给 RestClient.execute,这是所有请求的入口点。

RestClient.add_before_execution_proc do |req, params|
  params[:verify_ssl] = false
end

您也可以考虑创建一个简单的 class 来封装您的需求并执行 get/post/... rest without verify_ssl

(勾选https://github.com/rest-client/rest-client/blob/master/lib/restclient/request.rb#L160

我会为 RestClient 调用编写自己的辅助包装器,而不是修改全局状态,因为全局更改使得阅读您的代码的人很难理解正在发生的事情。

例如:

def insecure_restclient_get(url, headers={}, &block)
  RestClient::Request.execute(verify_ssl: false, method: :get, url: url, headers: headers, &block)
end

def insecure_restclient_post(url, payload, headers={}, &block)
  RestClient::Request.execute(verify_ssl: false, method: :post, url: url, payload: payload, headers: headers, &block)
end

另请注意,如果您正在设置 verify_ssl: false,您还不如根本不使用 https。

为了回应@alb-i986 对@AlexandreAngelim 的回答的评论,我编写了下面的猴子补丁,它包装了 RestClient::Request class 的构造函数,因此它可以与最新的 RestClient:

module RestClient
    class Request
        orig_initialize = instance_method(:initialize)

        define_method(:initialize) do |args|
            args[:verify_ssl] = false
            orig_initialize.bind(self).(args)
        end
    end
end