diff --git a/lib/mindee/v2/http/mindee_api_v2.rb b/lib/mindee/v2/http/mindee_api_v2.rb index 18c0539dc..ba7ccf791 100644 --- a/lib/mindee/v2/http/mindee_api_v2.rb +++ b/lib/mindee/v2/http/mindee_api_v2.rb @@ -73,10 +73,11 @@ def req_get_search(params) 'User-Agent' => @settings.user_agent, } req = Net::HTTP::Get.new(uri, headers) - req['Transfer-Encoding'] = 'chunked' response = Net::HTTP.start(uri.hostname, uri.port, - use_ssl: true, read_timeout: @settings.request_timeout) do |http| + use_ssl: true, + open_timeout: @settings.request_timeout, + read_timeout: @settings.request_timeout) do |http| http.request(req) end params.response_class.new(process_response(response)) @@ -145,9 +146,11 @@ def poll(url) 'User-Agent' => @settings.user_agent, } req = Net::HTTP::Get.new(uri, headers) - req['Transfer-Encoding'] = 'chunked' - Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: @settings.request_timeout) do |http| + Net::HTTP.start(uri.hostname, uri.port, + use_ssl: true, + open_timeout: @settings.request_timeout, + read_timeout: @settings.request_timeout) do |http| return http.request(req) end raise Mindee::Error::MindeeError, 'Could not resolve server response.' @@ -208,7 +211,10 @@ def enqueue(input_source, params) req.set_form(form_data, 'multipart/form-data') req['Transfer-Encoding'] = 'chunked' - Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: @settings.request_timeout) do |http| + Net::HTTP.start(uri.hostname, uri.port, + use_ssl: true, + open_timeout: @settings.request_timeout, + read_timeout: @settings.request_timeout) do |http| return http.request(req) end raise Mindee::Error::MindeeError, 'Could not resolve server response.' diff --git a/sig/custom/net_http.rbs b/sig/custom/net_http.rbs index c53bad3b8..2eef301b4 100644 --- a/sig/custom/net_http.rbs +++ b/sig/custom/net_http.rbs @@ -6,7 +6,7 @@ module Net class BufferedIO end class HTTP - def self.start: [T] (String?, Integer?, use_ssl: bool?, ?read_timeout: Integer) { (HTTP) -> T } -> T + def self.start: [T] (String?, Integer?, use_ssl: bool?, ?open_timeout: Integer, ?read_timeout: Integer) { (HTTP) -> T } -> T def request: (untyped) -> untyped diff --git a/spec/data b/spec/data index 4b7f33766..5037ffc3c 160000 --- a/spec/data +++ b/spec/data @@ -1 +1 @@ -Subproject commit 4b7f33766fab0e67804b84447b73c80a902d886a +Subproject commit 5037ffc3c443ec0c93ed673acd22d6ae1c65771a diff --git a/spec/v2/client_v2_spec.rb b/spec/v2/client_v2_spec.rb index d64185929..13e0be0ce 100644 --- a/spec/v2/client_v2_spec.rb +++ b/spec/v2/client_v2_spec.rb @@ -119,6 +119,29 @@ def stub_next_request_with(method, hash:, status_code: 0) resp.job.completed_at.strftime('%Y-%m-%dT%H:%M:%S.%6N') ).to eq('2026-04-20T18:32:02.734312') end + it 'poll builds a real Net::HTTP::Get request without a Transfer-Encoding header' do + job_json = File.read(File.join(V2_DATA_DIR, 'job', 'ok_processing.json')) + captured_request = nil + captured_options = nil + + http_double = instance_double(Net::HTTP) + allow(http_double).to receive(:request) do |req| + captured_request = req + build_mock_http_response(job_json, 200) + end + allow(Net::HTTP).to receive(:start) do |_host, _port, **options, &block| + captured_options = options + block.call(http_double) + end + + api.send(:poll, "#{base_url}/v2/jobs/123e4567-e89b-12d3-a456-426614174000") + + expect(captured_request).to be_a(Net::HTTP::Get) + expect(captured_request['Transfer-Encoding']).to be_nil + expect(captured_options[:open_timeout]).to eq(api.settings.request_timeout) + expect(captured_options[:read_timeout]).to eq(api.settings.request_timeout) + end + context 'Cancellation token' do let(:processing_json) { File.read(File.join(V2_DATA_DIR, 'job', 'ok_processing.json')) }