From 0228b4a074ec7b5969f99d61e6d6057a0e74ba4a Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Wed, 26 Apr 2017 15:48:02 -1000 Subject: [PATCH 01/11] Experimenting with the boundary setting --- lib/restclient/payload.rb | 2 +- lib/restclient/request.rb | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/restclient/payload.rb b/lib/restclient/payload.rb index 56563fa5..27ba9355 100644 --- a/lib/restclient/payload.rb +++ b/lib/restclient/payload.rb @@ -198,7 +198,7 @@ def handle_key key end def headers - super.merge({'Content-Type' => %Q{multipart/form-data; boundary=#{boundary}}}) + super.merge({'Content-Type' => %Q{multipart/form-data; boundary=--TestBoundarySetByAdstream}) end def close diff --git a/lib/restclient/request.rb b/lib/restclient/request.rb index a875dc0b..04fae672 100644 --- a/lib/restclient/request.rb +++ b/lib/restclient/request.rb @@ -363,7 +363,8 @@ def process_cookie_args!(uri, headers, args) def make_headers(user_headers) headers = stringify_headers(default_headers).merge(stringify_headers(user_headers)) - # override headers from the payload (e.g. Content-Type, Content-Length) +=begin +# override headers from the payload (e.g. Content-Type, Content-Length) if @payload payload_headers = @payload.headers @@ -382,6 +383,8 @@ def make_headers(user_headers) headers.merge!(payload_headers) end +=end + # merge in cookies cookies = make_cookie_header From 1fc29f274700e4243573d252eb951a079c180ff6 Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Wed, 26 Apr 2017 16:31:59 -1000 Subject: [PATCH 02/11] Fix typo --- lib/restclient/payload.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/restclient/payload.rb b/lib/restclient/payload.rb index 27ba9355..135d9f0d 100644 --- a/lib/restclient/payload.rb +++ b/lib/restclient/payload.rb @@ -198,7 +198,7 @@ def handle_key key end def headers - super.merge({'Content-Type' => %Q{multipart/form-data; boundary=--TestBoundarySetByAdstream}) + super.merge({'Content-Type' => %Q{multipart/form-data; boundary=--TestBoundarySetByAdstream}}) end def close From d506a0fead2676e3839fd1115ccfee62ea651baa Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Wed, 26 Apr 2017 16:44:16 -1000 Subject: [PATCH 03/11] Uncomment code --- lib/restclient/request.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/restclient/request.rb b/lib/restclient/request.rb index 04fae672..2170e961 100644 --- a/lib/restclient/request.rb +++ b/lib/restclient/request.rb @@ -363,8 +363,8 @@ def process_cookie_args!(uri, headers, args) def make_headers(user_headers) headers = stringify_headers(default_headers).merge(stringify_headers(user_headers)) -=begin -# override headers from the payload (e.g. Content-Type, Content-Length) + + # override headers from the payload (e.g. Content-Type, Content-Length) if @payload payload_headers = @payload.headers @@ -383,7 +383,7 @@ def make_headers(user_headers) headers.merge!(payload_headers) end -=end + # merge in cookies From 5e7e837cddb0b21e3e23fbcc785e0ebfab5f9d26 Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Wed, 26 Apr 2017 16:44:34 -1000 Subject: [PATCH 04/11] Remove unnecessary spaces --- lib/restclient/request.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/restclient/request.rb b/lib/restclient/request.rb index 2170e961..a875dc0b 100644 --- a/lib/restclient/request.rb +++ b/lib/restclient/request.rb @@ -363,7 +363,6 @@ def process_cookie_args!(uri, headers, args) def make_headers(user_headers) headers = stringify_headers(default_headers).merge(stringify_headers(user_headers)) - # override headers from the payload (e.g. Content-Type, Content-Length) if @payload payload_headers = @payload.headers @@ -384,8 +383,6 @@ def make_headers(user_headers) headers.merge!(payload_headers) end - - # merge in cookies cookies = make_cookie_header if cookies && !cookies.empty? From 524bfb5aad60fcb708cc7d655532bd2115d4e755 Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Wed, 26 Apr 2017 16:54:39 -1000 Subject: [PATCH 05/11] Change boundary value --- lib/restclient/payload.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/restclient/payload.rb b/lib/restclient/payload.rb index 135d9f0d..99351972 100644 --- a/lib/restclient/payload.rb +++ b/lib/restclient/payload.rb @@ -198,7 +198,7 @@ def handle_key key end def headers - super.merge({'Content-Type' => %Q{multipart/form-data; boundary=--TestBoundarySetByAdstream}}) + super.merge({'Content-Type' => %Q{multipart/form-data; boundary=--ABW5FxdjB4-3nf6AYqUutk96-trWPzHdLABW5FxdjB4}}) end def close From 6d636df5f0dbe78002ca7a06d8074d1f24fe5af6 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 26 Apr 2017 20:18:32 -1000 Subject: [PATCH 06/11] Updating boundary to remove hyphens --- lib/restclient/payload.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/restclient/payload.rb b/lib/restclient/payload.rb index 99351972..07e514d6 100644 --- a/lib/restclient/payload.rb +++ b/lib/restclient/payload.rb @@ -198,7 +198,7 @@ def handle_key key end def headers - super.merge({'Content-Type' => %Q{multipart/form-data; boundary=--ABW5FxdjB4-3nf6AYqUutk96-trWPzHdLABW5FxdjB4}}) + super.merge({'Content-Type' => %Q{multipart/form-data; boundary=ABW5FxdjB4-3nf6AYqUutk96-trWPzHdLABW5FxdjB4}}) end def close From cbb3754b912cfa313082d36eec2154574e959d77 Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Thu, 27 Apr 2017 10:30:45 -1000 Subject: [PATCH 07/11] Further testing with Restclient --- lib/restclient/request.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/restclient/request.rb b/lib/restclient/request.rb index a875dc0b..9cadf717 100644 --- a/lib/restclient/request.rb +++ b/lib/restclient/request.rb @@ -365,6 +365,7 @@ def make_headers(user_headers) # override headers from the payload (e.g. Content-Type, Content-Length) if @payload + puts "The RESTCLIENT headers are...: #{headers}" payload_headers = @payload.headers # Warn the user if we override any headers that were previously From 5636355d1b83b0bff840efa8679a5811adb6c965 Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Thu, 27 Apr 2017 10:49:02 -1000 Subject: [PATCH 08/11] Clean up test printlns, change logic in Payload request to use parent content type if possible --- lib/restclient/payload.rb | 8 ++++++-- lib/restclient/request.rb | 3 +-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/restclient/payload.rb b/lib/restclient/payload.rb index 07e514d6..fb267706 100644 --- a/lib/restclient/payload.rb +++ b/lib/restclient/payload.rb @@ -197,8 +197,12 @@ def handle_key key key end - def headers - super.merge({'Content-Type' => %Q{multipart/form-data; boundary=ABW5FxdjB4-3nf6AYqUutk96-trWPzHdLABW5FxdjB4}}) + def headers(context_type_header) + context_type = context_type_header.present? ? + {'Content-Type' => %Q{#{context_type_header}}} : + {'Content-Type' => %Q{multipart/form-data; boundary=ABW5FxdjB4-3nf6AYqUutk96-trWPzHdLABW5FxdjB4}} + + super.merge(context_type) end def close diff --git a/lib/restclient/request.rb b/lib/restclient/request.rb index 9cadf717..7b9e26f5 100644 --- a/lib/restclient/request.rb +++ b/lib/restclient/request.rb @@ -365,8 +365,7 @@ def make_headers(user_headers) # override headers from the payload (e.g. Content-Type, Content-Length) if @payload - puts "The RESTCLIENT headers are...: #{headers}" - payload_headers = @payload.headers + payload_headers = @payload.headers(headers["Content-Type"]) # Warn the user if we override any headers that were previously # present. This usually indicates that rest-client was passed From ff4449575aa347c44c09e203dff1e68d6e370855 Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Thu, 27 Apr 2017 10:57:46 -1000 Subject: [PATCH 09/11] temporarily reverting the payload headers method --- lib/restclient/payload.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/restclient/payload.rb b/lib/restclient/payload.rb index fb267706..dc82c03a 100644 --- a/lib/restclient/payload.rb +++ b/lib/restclient/payload.rb @@ -198,11 +198,14 @@ def handle_key key end def headers(context_type_header) +=begin context_type = context_type_header.present? ? {'Content-Type' => %Q{#{context_type_header}}} : {'Content-Type' => %Q{multipart/form-data; boundary=ABW5FxdjB4-3nf6AYqUutk96-trWPzHdLABW5FxdjB4}} +=end - super.merge(context_type) + + super.merge({'Content-Type' => %Q{multipart/form-data; boundary=ABW5FxdjB4-3nf6AYqUutk96-trWPzHdLABW5FxdjB4}}) end def close From fa6f5b03c1659e2d6623d52a04306b0701675c17 Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Thu, 27 Apr 2017 11:03:40 -1000 Subject: [PATCH 10/11] Reverting changes, added todo --- lib/restclient/payload.rb | 10 ++-------- lib/restclient/request.rb | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/lib/restclient/payload.rb b/lib/restclient/payload.rb index dc82c03a..f51321b4 100644 --- a/lib/restclient/payload.rb +++ b/lib/restclient/payload.rb @@ -197,14 +197,8 @@ def handle_key key key end - def headers(context_type_header) -=begin - context_type = context_type_header.present? ? - {'Content-Type' => %Q{#{context_type_header}}} : - {'Content-Type' => %Q{multipart/form-data; boundary=ABW5FxdjB4-3nf6AYqUutk96-trWPzHdLABW5FxdjB4}} -=end - - + def headers + # TODO: Update to allow user to pass in boundary in execute call super.merge({'Content-Type' => %Q{multipart/form-data; boundary=ABW5FxdjB4-3nf6AYqUutk96-trWPzHdLABW5FxdjB4}}) end diff --git a/lib/restclient/request.rb b/lib/restclient/request.rb index 7b9e26f5..a875dc0b 100644 --- a/lib/restclient/request.rb +++ b/lib/restclient/request.rb @@ -365,7 +365,7 @@ def make_headers(user_headers) # override headers from the payload (e.g. Content-Type, Content-Length) if @payload - payload_headers = @payload.headers(headers["Content-Type"]) + payload_headers = @payload.headers # Warn the user if we override any headers that were previously # present. This usually indicates that rest-client was passed From 7bf42b134b5fe6e0674519c2b2678914e8474baa Mon Sep 17 00:00:00 2001 From: Brandon Dean Date: Sun, 23 Jul 2017 15:46:27 -1000 Subject: [PATCH 11/11] Attempt to strip header info if exclude_headers is true --- lib/restclient/payload.rb | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/restclient/payload.rb b/lib/restclient/payload.rb index f51321b4..a54f40bb 100644 --- a/lib/restclient/payload.rb +++ b/lib/restclient/payload.rb @@ -118,10 +118,11 @@ class Multipart < Base def build_stream(params) b = '--' + boundary + exclude_headers = params[:exclude_headers] @stream = Tempfile.new("RESTClient.Stream.#{rand(1000)}") @stream.binmode - @stream.write(b + EOL) + @stream.write(b + EOL) unless exclude_headers case params when Hash, ParamsArray @@ -134,14 +135,14 @@ def build_stream(params) x.each_with_index do |a, index| k, v = * a if v.respond_to?(:read) && v.respond_to?(:path) - create_file_field(@stream, k, v) + create_file_field(@stream, k, v) unless exclude_headers else create_regular_field(@stream, k, v) end - @stream.write(EOL + b) - @stream.write(EOL) unless last_index == index + @stream.write(EOL + b) unless exclude_headers + @stream.write(EOL) unless last_index == index || exclude_headers end - @stream.write('--') + @stream.write('--') unless exclude_headers @stream.write(EOL) @stream.seek(0) end @@ -153,13 +154,15 @@ def create_regular_field(s, k, v) s.write(v) end - def create_file_field(s, k, v) + def create_file_field(s, k, v, exclude_headers = false) begin - s.write("Content-Disposition: form-data;") - s.write(" name=\"#{k}\";") unless (k.nil? || k=='') - s.write(" filename=\"#{v.respond_to?(:original_filename) ? v.original_filename : File.basename(v.path)}\"#{EOL}") - s.write("Content-Type: #{v.respond_to?(:content_type) ? v.content_type : mime_for(v.path)}#{EOL}") - s.write(EOL) + unless exclude_headers + s.write("Content-Disposition: form-data;") + s.write(" name=\"#{k}\";") unless (k.nil? || k=='') + s.write(" filename=\"#{v.respond_to?(:original_filename) ? v.original_filename : File.basename(v.path)}\"#{EOL}") + s.write("Content-Type: #{v.respond_to?(:content_type) ? v.content_type : mime_for(v.path)}#{EOL}") + s.write(EOL) + end while (data = v.read(8124)) s.write(data) end