mirror of
https://github.com/lostisland/faraday.git
synced 2025-10-04 00:02:03 -04:00
Encode Spaces in Query Strings as '%20' Instead of '+' (#1125)
This commit is contained in:
parent
b4ad6e386e
commit
864a7e52f3
@ -16,12 +16,20 @@ module Faraday
|
||||
NestedParamsEncoder.encode(params)
|
||||
end
|
||||
|
||||
def default_space_encoding
|
||||
@default_space_encoding ||= '+'
|
||||
end
|
||||
|
||||
class << self
|
||||
attr_writer :default_space_encoding
|
||||
end
|
||||
|
||||
ESCAPE_RE = /[^a-zA-Z0-9 .~_-]/.freeze
|
||||
|
||||
def escape(str)
|
||||
str.to_s.gsub(ESCAPE_RE) do |match|
|
||||
'%' + match.unpack('H2' * match.bytesize).join('%').upcase
|
||||
end.tr(' ', '+')
|
||||
end.gsub(' ', default_space_encoding)
|
||||
end
|
||||
|
||||
def unescape(str)
|
||||
|
@ -67,4 +67,17 @@ RSpec.describe Faraday::Request::UrlEncoded do
|
||||
response = conn.post('/echo', 'a' => { 'b' => { 'c' => ['d'] } })
|
||||
expect(response.body).to eq('a%5Bb%5D%5Bc%5D%5B%5D=d')
|
||||
end
|
||||
|
||||
context 'customising default_space_encoding' do
|
||||
around do |example|
|
||||
Faraday::Utils.default_space_encoding = '%20'
|
||||
example.run
|
||||
Faraday::Utils.default_space_encoding = nil
|
||||
end
|
||||
|
||||
it 'uses the custom character to encode spaces' do
|
||||
response = conn.post('/echo', str: 'apple banana')
|
||||
expect(response.body).to eq('str=apple%20banana')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user