具有“本机”ntlm代理支持的Ruby http客户端

时间:2012-06-15 07:42:09

标签: ruby http ntlm

我正在寻找一个支持NTLM代理身份验证的ruby HTTP客户端gem“本机” - 而不是通过cntlm或类似的本地代理。

任何提示都表示赞赏。

3 个答案:

答案 0 :(得分:2)

一点挖掘出土的Typhoeus:

require 'typhoeus'
e=Typhoeus::Easy.new
e.url="http://www.google.com/"
e.proxy = {:server => "1.2.3.4:80"}
e.proxy_auth={:username => "user", :password => 'password'}
e.perform

答案 1 :(得分:0)

Typhoeus似乎已被改变用途。 libcurl包装器现在是Ethon(https://github.com/typhoeus/ethon)。

我使用另一个libcurl包装器Curb(https://github.com/taf2/curb)成功通过NTLM代理进行了身份验证:

require 'spec_helper'
require 'curl'

describe Curl do
  it 'should connect via an ISA proxy' do
    c = Curl::Easy.new('http://example.com/') do |curl|  
      curl.proxy_url = 'http://username:password@localhost:8080'
      curl.proxy_auth_types = Curl::CURLAUTH_NTLM
    end

    c.perform

    headers = c.header_str.split("\r\n")
    #puts headers.inspect

    headers.should include 'X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.19'
  end

end

根据需要更改设置和断言。

答案 2 :(得分:0)

你可以用Typhoeus和Ethon做ntlm - 取决于你需要多少功能。 Typhoeus不仅仅是Ethon,而且Ethon更强大,因为它更低级。

require 'ethon'
easy = Ethon::Easy.new(
  url: "http://www.google.com/", 
  proxy: "1.2.3.4:80", 
  proxyuserpwd: "user:password", 
  proxyauth: "ntlm"
)
easy.perform

Typhoeus接受相同的选择:

require 'typhoeus'
request = Typhoeus::Request.new(
  "http://www.google.com/", 
  proxy: "1.2.3.4:80", 
  proxyuserpwd: "user:password", 
  proxyauth: "ntlm"
)
request.run

我编写了两个代码示例而没有测试它们b / c我没有代理和最新的Typhoeus / Ethon版本(根据你的例子你还没有)。