diff --git a/lib/httparty/request.rb b/lib/httparty/request.rb index 5e67db2c..98022286 100644 --- a/lib/httparty/request.rb +++ b/lib/httparty/request.rb @@ -160,7 +160,11 @@ def setup_raw_request end def setup_digest_auth - res = http.head(uri.request_uri, options[:headers]) + if @raw_request.class == Net::HTTP::Get || @raw_request.class == Net::HTTP::Head + res = http.head(uri.request_uri, options[:headers]) + else + res = self.last_response = http.request(@raw_request) + end if res['www-authenticate'] != nil && res['www-authenticate'].length > 0 @raw_request.digest_auth(username, password, res) end diff --git a/spec/httparty/request_spec.rb b/spec/httparty/request_spec.rb index 49667c23..5721070e 100644 --- a/spec/httparty/request_spec.rb +++ b/spec/httparty/request_spec.rb @@ -95,6 +95,17 @@ raw_request = @request.instance_variable_get(:@raw_request) raw_request.instance_variable_get(:@header)['Authorization'].should_not be_nil end + + it "should use the right http method for digest authentication" do + @post_request = HTTParty::Request.new(Net::HTTP::Post, 'http://api.foo.com/v1', :format => :xml) + FakeWeb.register_uri(:post, "http://api.foo.com/v1", {}) + + http = @post_request.send(:http) + @post_request.should_receive(:http).and_return(http) + http.should_not_receive(:head).and_return({'www-authenticate' => nil}) + @post_request.options[:digest_auth] = {:username => 'foobar', :password => 'secret'} + @post_request.send(:setup_raw_request) + end end describe "#uri" do