httparty 0.13.0 → 0.21.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.editorconfig +18 -0
- data/.github/workflows/ci.yml +26 -0
- data/.gitignore +4 -0
- data/.rubocop.yml +92 -0
- data/.rubocop_todo.yml +124 -0
- data/CONTRIBUTING.md +23 -0
- data/Changelog.md +557 -0
- data/Gemfile +15 -3
- data/Guardfile +4 -3
- data/README.md +24 -25
- data/Rakefile +5 -7
- data/bin/httparty +20 -14
- data/docs/README.md +191 -0
- data/examples/README.md +89 -0
- data/examples/aaws.rb +10 -6
- data/examples/basic.rb +6 -10
- data/examples/body_stream.rb +14 -0
- data/examples/crack.rb +2 -2
- data/examples/custom_parsers.rb +6 -5
- data/examples/delicious.rb +8 -8
- data/examples/google.rb +2 -2
- data/examples/headers_and_user_agents.rb +7 -3
- data/examples/idn.rb +10 -0
- data/examples/logging.rb +36 -0
- data/examples/microsoft_graph.rb +52 -0
- data/examples/multipart.rb +22 -0
- data/examples/nokogiri_html_parser.rb +0 -3
- data/examples/peer_cert.rb +9 -0
- data/examples/rescue_json.rb +17 -0
- data/examples/rubyurl.rb +3 -3
- data/examples/stackexchange.rb +24 -0
- data/examples/stream_download.rb +26 -0
- data/examples/tripit_sign_in.rb +20 -9
- data/examples/twitter.rb +7 -7
- data/examples/whoismyrep.rb +1 -1
- data/httparty.gemspec +13 -9
- data/lib/httparty/connection_adapter.rb +105 -25
- data/lib/httparty/cookie_hash.rb +10 -9
- data/lib/httparty/decompressor.rb +102 -0
- data/lib/httparty/exceptions.rb +8 -2
- data/lib/httparty/hash_conversions.rb +39 -19
- data/lib/httparty/headers_processor.rb +32 -0
- data/lib/httparty/logger/apache_formatter.rb +47 -0
- data/lib/httparty/logger/curl_formatter.rb +93 -0
- data/lib/httparty/logger/logger.rb +22 -10
- data/lib/httparty/logger/logstash_formatter.rb +61 -0
- data/lib/httparty/module_inheritable_attributes.rb +6 -4
- data/lib/httparty/net_digest_auth.rb +76 -25
- data/lib/httparty/parser.rb +28 -15
- data/lib/httparty/request/body.rb +105 -0
- data/lib/httparty/request/multipart_boundary.rb +13 -0
- data/lib/httparty/request.rb +218 -130
- data/lib/httparty/response/headers.rb +23 -19
- data/lib/httparty/response.rb +99 -15
- data/lib/httparty/response_fragment.rb +21 -0
- data/lib/httparty/text_encoder.rb +72 -0
- data/lib/httparty/utils.rb +13 -0
- data/lib/httparty/version.rb +3 -1
- data/lib/httparty.rb +191 -83
- data/website/css/common.css +1 -1
- data/website/index.html +3 -3
- metadata +50 -120
- data/.travis.yml +0 -7
- data/History +0 -303
- data/features/basic_authentication.feature +0 -20
- data/features/command_line.feature +0 -7
- data/features/deals_with_http_error_codes.feature +0 -26
- data/features/digest_authentication.feature +0 -20
- data/features/handles_compressed_responses.feature +0 -27
- data/features/handles_multiple_formats.feature +0 -57
- data/features/steps/env.rb +0 -22
- data/features/steps/httparty_response_steps.rb +0 -52
- data/features/steps/httparty_steps.rb +0 -35
- data/features/steps/mongrel_helper.rb +0 -94
- data/features/steps/remote_service_steps.rb +0 -74
- data/features/supports_redirection.feature +0 -22
- data/features/supports_timeout_option.feature +0 -13
- data/lib/httparty/core_extensions.rb +0 -32
- data/lib/httparty/logger/apache_logger.rb +0 -22
- data/lib/httparty/logger/curl_logger.rb +0 -48
- data/spec/fixtures/delicious.xml +0 -23
- data/spec/fixtures/empty.xml +0 -0
- data/spec/fixtures/google.html +0 -3
- data/spec/fixtures/ssl/generate.sh +0 -29
- data/spec/fixtures/ssl/generated/1fe462c2.0 +0 -16
- data/spec/fixtures/ssl/generated/bogushost.crt +0 -13
- data/spec/fixtures/ssl/generated/ca.crt +0 -16
- data/spec/fixtures/ssl/generated/ca.key +0 -15
- data/spec/fixtures/ssl/generated/selfsigned.crt +0 -14
- data/spec/fixtures/ssl/generated/server.crt +0 -13
- data/spec/fixtures/ssl/generated/server.key +0 -15
- data/spec/fixtures/ssl/openssl-exts.cnf +0 -9
- data/spec/fixtures/twitter.csv +0 -2
- data/spec/fixtures/twitter.json +0 -1
- data/spec/fixtures/twitter.xml +0 -403
- data/spec/fixtures/undefined_method_add_node_for_nil.xml +0 -2
- data/spec/httparty/connection_adapter_spec.rb +0 -298
- data/spec/httparty/cookie_hash_spec.rb +0 -83
- data/spec/httparty/exception_spec.rb +0 -23
- data/spec/httparty/logger/apache_logger_spec.rb +0 -26
- data/spec/httparty/logger/curl_logger_spec.rb +0 -18
- data/spec/httparty/logger/logger_spec.rb +0 -22
- data/spec/httparty/net_digest_auth_spec.rb +0 -152
- data/spec/httparty/parser_spec.rb +0 -165
- data/spec/httparty/request_spec.rb +0 -631
- data/spec/httparty/response_spec.rb +0 -221
- data/spec/httparty/ssl_spec.rb +0 -74
- data/spec/httparty_spec.rb +0 -764
- data/spec/spec.opts +0 -2
- data/spec/spec_helper.rb +0 -37
- data/spec/support/ssl_test_helper.rb +0 -47
- data/spec/support/ssl_test_server.rb +0 -80
- data/spec/support/stub_response.rb +0 -43
data/spec/spec.opts
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
$:.push File.expand_path("../lib", __FILE__)
|
2
|
-
|
3
|
-
require "httparty"
|
4
|
-
|
5
|
-
require 'spec/autorun'
|
6
|
-
require 'fakeweb'
|
7
|
-
|
8
|
-
def file_fixture(filename)
|
9
|
-
open(File.join(File.dirname(__FILE__), 'fixtures', "#{filename.to_s}")).read
|
10
|
-
end
|
11
|
-
|
12
|
-
Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
|
13
|
-
|
14
|
-
Spec::Runner.configure do |config|
|
15
|
-
config.include HTTParty::StubResponse
|
16
|
-
config.include HTTParty::SSLTestHelper
|
17
|
-
|
18
|
-
config.before(:suite) do
|
19
|
-
FakeWeb.allow_net_connect = false
|
20
|
-
end
|
21
|
-
|
22
|
-
config.after(:suite) do
|
23
|
-
FakeWeb.allow_net_connect = true
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
Spec::Matchers.define :use_ssl do
|
28
|
-
match do |connection|
|
29
|
-
connection.use_ssl?
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
Spec::Matchers.define :use_cert_store do |cert_store|
|
34
|
-
match do |connection|
|
35
|
-
connection.cert_store == cert_store
|
36
|
-
end
|
37
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
|
3
|
-
module HTTParty
|
4
|
-
module SSLTestHelper
|
5
|
-
def ssl_verify_test(mode, ca_basename, server_cert_filename, options = {})
|
6
|
-
options = {
|
7
|
-
:format => :json,
|
8
|
-
:timeout => 30,
|
9
|
-
}.merge(options)
|
10
|
-
|
11
|
-
if mode
|
12
|
-
ca_path = File.expand_path("../../fixtures/ssl/generated/#{ca_basename}", __FILE__)
|
13
|
-
raise ArgumentError.new("#{ca_path} does not exist") unless File.exist?(ca_path)
|
14
|
-
options[mode] = ca_path
|
15
|
-
end
|
16
|
-
|
17
|
-
begin
|
18
|
-
test_server = SSLTestServer.new(
|
19
|
-
:rsa_key => File.read(File.expand_path("../../fixtures/ssl/generated/server.key", __FILE__)),
|
20
|
-
:cert => File.read(File.expand_path("../../fixtures/ssl/generated/#{server_cert_filename}", __FILE__)))
|
21
|
-
|
22
|
-
test_server.start
|
23
|
-
|
24
|
-
if mode
|
25
|
-
ca_path = File.expand_path("../../fixtures/ssl/generated/#{ca_basename}", __FILE__)
|
26
|
-
raise ArgumentError.new("#{ca_path} does not exist") unless File.exist?(ca_path)
|
27
|
-
return HTTParty.get("https://localhost:#{test_server.port}/", options)
|
28
|
-
else
|
29
|
-
return HTTParty.get("https://localhost:#{test_server.port}/", options)
|
30
|
-
end
|
31
|
-
ensure
|
32
|
-
test_server.stop if test_server
|
33
|
-
end
|
34
|
-
|
35
|
-
test_server = SSLTestServer.new({
|
36
|
-
:rsa_key => path.join('server.key').read,
|
37
|
-
:cert => path.join(server_cert_filename).read,
|
38
|
-
})
|
39
|
-
|
40
|
-
test_server.start
|
41
|
-
|
42
|
-
HTTParty.get("https://localhost:#{test_server.port}/", options)
|
43
|
-
ensure
|
44
|
-
test_server.stop if test_server
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'openssl'
|
2
|
-
require 'socket'
|
3
|
-
require 'thread'
|
4
|
-
|
5
|
-
# NOTE: This code is garbage. It probably has deadlocks, it might leak
|
6
|
-
# threads, and otherwise cause problems in a real system. It's really only
|
7
|
-
# intended for testing HTTParty.
|
8
|
-
class SSLTestServer
|
9
|
-
attr_accessor :ctx # SSLContext object
|
10
|
-
attr_reader :port
|
11
|
-
|
12
|
-
def initialize(options={})
|
13
|
-
@ctx = OpenSSL::SSL::SSLContext.new
|
14
|
-
@ctx.cert = OpenSSL::X509::Certificate.new(options[:cert])
|
15
|
-
@ctx.key = OpenSSL::PKey::RSA.new(options[:rsa_key])
|
16
|
-
@ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE # Don't verify client certificate
|
17
|
-
@port = options[:port] || 0
|
18
|
-
@thread = nil
|
19
|
-
@stopping_mutex = Mutex.new
|
20
|
-
@stopping = false
|
21
|
-
end
|
22
|
-
|
23
|
-
def start
|
24
|
-
@raw_server = TCPServer.new(@port)
|
25
|
-
|
26
|
-
if @port == 0
|
27
|
-
@port = Socket::getnameinfo(@raw_server.getsockname, Socket::NI_NUMERICHOST|Socket::NI_NUMERICSERV)[1].to_i
|
28
|
-
end
|
29
|
-
|
30
|
-
@ssl_server = OpenSSL::SSL::SSLServer.new(@raw_server, @ctx)
|
31
|
-
|
32
|
-
@stopping_mutex.synchronize{
|
33
|
-
return if @stopping
|
34
|
-
@thread = Thread.new{ thread_main }
|
35
|
-
}
|
36
|
-
|
37
|
-
nil
|
38
|
-
end
|
39
|
-
|
40
|
-
def stop
|
41
|
-
@stopping_mutex.synchronize{
|
42
|
-
return if @stopping
|
43
|
-
@stopping = true
|
44
|
-
}
|
45
|
-
@thread.join
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def thread_main
|
51
|
-
until @stopping_mutex.synchronize{ @stopping }
|
52
|
-
(rr,_,_) = select([@ssl_server.to_io], nil, nil, 0.1)
|
53
|
-
|
54
|
-
next unless rr && rr.include?(@ssl_server.to_io)
|
55
|
-
|
56
|
-
socket = @ssl_server.accept
|
57
|
-
|
58
|
-
Thread.new{
|
59
|
-
header = []
|
60
|
-
|
61
|
-
until (line = socket.readline).rstrip.empty?
|
62
|
-
header << line
|
63
|
-
end
|
64
|
-
|
65
|
-
response =<<EOF
|
66
|
-
HTTP/1.1 200 OK
|
67
|
-
Connection: close
|
68
|
-
Content-Type: application/json; charset=UTF-8
|
69
|
-
|
70
|
-
{"success":true}
|
71
|
-
EOF
|
72
|
-
|
73
|
-
socket.write(response.gsub(/\r\n/n, "\n").gsub(/\n/n, "\r\n"))
|
74
|
-
socket.close
|
75
|
-
}
|
76
|
-
end
|
77
|
-
|
78
|
-
@ssl_server.close
|
79
|
-
end
|
80
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module HTTParty
|
2
|
-
module StubResponse
|
3
|
-
def stub_http_response_with(filename)
|
4
|
-
format = filename.split('.').last.intern
|
5
|
-
data = file_fixture(filename)
|
6
|
-
|
7
|
-
response = Net::HTTPOK.new("1.1", 200, "Content for you")
|
8
|
-
response.stub!(:body).and_return(data)
|
9
|
-
|
10
|
-
http_request = HTTParty::Request.new(Net::HTTP::Get, 'http://localhost', :format => format)
|
11
|
-
http_request.stub_chain(:http, :request).and_return(response)
|
12
|
-
|
13
|
-
HTTParty::Request.should_receive(:new).and_return(http_request)
|
14
|
-
end
|
15
|
-
|
16
|
-
def stub_chunked_http_response_with(chunks)
|
17
|
-
response = Net::HTTPResponse.new("1.1", 200, nil)
|
18
|
-
response.stub(:chunked_data).and_return(chunks)
|
19
|
-
def response.read_body(&block)
|
20
|
-
@body || chunked_data.each(&block)
|
21
|
-
end
|
22
|
-
|
23
|
-
http_request = HTTParty::Request.new(Net::HTTP::Get, 'http://localhost', :format => "html")
|
24
|
-
http_request.stub_chain(:http, :request).and_yield(response).and_return(response)
|
25
|
-
|
26
|
-
HTTParty::Request.should_receive(:new).and_return(http_request)
|
27
|
-
end
|
28
|
-
|
29
|
-
def stub_response(body, code = 200)
|
30
|
-
@request.options[:base_uri] ||= 'http://localhost'
|
31
|
-
unless defined?(@http) && @http
|
32
|
-
@http = Net::HTTP.new('localhost', 80)
|
33
|
-
@request.stub!(:http).and_return(@http)
|
34
|
-
end
|
35
|
-
|
36
|
-
response = Net::HTTPResponse::CODE_TO_OBJ[code.to_s].new("1.1", code, body)
|
37
|
-
response.stub!(:body).and_return(body)
|
38
|
-
|
39
|
-
@http.stub!(:request).and_return(response)
|
40
|
-
response
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|