2011-01-20 33 views

Trả lời

12

Hóa ra nó là như thế này:

xmlrpc = ::XMLRPC::Client.new("foohost") 
xmlrpc.instance_variable_get(:@http).instance_variable_set(:@verify_mode, OpenSSL::SSL::VERIFY_NONE) 

đó làm việc với ruby ​​1.9.2, nhưng rõ ràng là chọc vào internals, vì vậy câu trả lời thực sự là "API không cung cấp một cơ chế như vậy, nhưng đây là một hack ".

0

Trên thực tế khách hàng đã được cập nhật, bây giờ ai có quyền truy cập trực tiếp đến các kết nối http: https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/41286/diff/lib/xmlrpc/client.rb

xmlrpc.http.verify_mode = OpenSSL::SSL::VERIFY_NONE 

Nhưng thiết lập tốt hơn ca_file hoặc ca_path. Tôi vẫn không thấy tùy chọn để áp dụng cấu hình như vậy cho các cuộc gọi _async.

Cập nhật: tìm thấy một workaround bởi khỉ vá các đối tượng khách hàng:

xmlrpc_client.http.ca_file = @options[:ca_file] 
    xmlrpc_client.instance_variable_set(:@ca_file, @options[:ca_file]) 
    def xmlrpc_client.net_http(host, port, proxy_host, proxy_port) 
     h = Net::HTTP.new host, port, proxy_host, proxy_port 
     h.ca_file = @ca_file 
     h 
    end 

Vì vậy, bạn cần cả hai, cách tiếp cận cũ và vá khỉ. Chúng ta cũng thêm một biến mẫu, nếu không phương thức mới không thể thấy giá trị thực.

Các vấn đề liên quan