aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/net/http.rb14
2 files changed, 8 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 211d04e04e..7bde009e42 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Dec 2 10:39:39 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * lib/net/http.rb (Net::HTTP#set_form_data):
+ use URI.encode_www_form for application/x-www-form-urlencoded.
+
Thu Dec 2 10:38:40 2010 NARUSE, Yui <naruse@ruby-lang.org>
* ext/extmk.rb: remove $makeflags.defined?, it should be $mflags.
diff --git a/lib/net/http.rb b/lib/net/http.rb
index 55b731d058..4d475b14f7 100644
--- a/lib/net/http.rb
+++ b/lib/net/http.rb
@@ -1784,22 +1784,14 @@ module Net #:nodoc:
# http.set_form_data({"q" => "ruby", "lang" => "en"}, ';')
#
def set_form_data(params, sep = '&')
- self.body = params.map {|k, v| encode_kvpair(k, v) }.flatten.join(sep)
+ query = URI.encode_www_form(params)
+ query.gsub!(/&/, sep) if sep != '&'
+ self.body = query
self.content_type = 'application/x-www-form-urlencoded'
end
alias form_data= set_form_data
- def encode_kvpair(k, vs)
- Array(vs).map {|v| "#{urlencode(k.to_s)}=#{urlencode(v.to_s)}" }
- end
- private :encode_kvpair
-
- def urlencode(str)
- str.dup.force_encoding('ASCII-8BIT').gsub(/[^a-zA-Z0-9_\.\-]/){'%%%02x' % $&.ord}
- end
- private :urlencode
-
# Set the Authorization: header for "Basic" authorization.
def basic_auth(account, password)
@header['authorization'] = [basic_encode(account, password)]