2011-08-01 3 views
0

これは奇妙なことです。 ;set_form_dataに追加すると、valueはサーバー側でvalue;と解釈されます。 ;を削除すると、 'dontescape'の値はfile%3a%2f%2f%2fpath%2ftoと解釈されます。一体何が起こっているのですか? CGI :: escapeを明示的に呼び出さない限り、何もエスケープしたくないです!助けてください:)set_form_data POSTのパラメータをエスケープする

postParams = { 
    'key1' => 'value', 
    'dontescape' => 'file:///path/to' 
} 

url = URI.parse('https://my.url') 

req = Net::HTTP::Post.new(url.path) 
req.basic_auth('username', 'password') 

req.set_form_data(postParams, ';') 

sock = Net::HTTP.new(url.host, 443) 
sock.use_ssl = true 
sock.ssl_version = 'SSLv3' 
sock.start do |http| 
response = http.request(req) do 
    return response.body 
end 
+0

フォーマットが改善されました。タブを使用しないでください(これまでのRuby)! –

+0

改善または改善する(d)?私はタブが好き、彼らは私の考えを助ける! –

+0

私はすでにあなたのコードを改善しました。そして残念なタブはRubyの規約ではありません。 –

答えて

0

PHP、Java、Node:これは問題ではありません。
まず、私が上書き:

# Module to override 
module Net 
    module HTTPHeader 
     def postUrlBuilder(postParams) 
      @queryUrl = '' 
      if (postParams.nil? or postParams == 0) 
       # Null or empty item 
      else 
       count = 0 
       postParams.each_pair do |key,value| 
        if (count == 0) 
         @queryUrl = @queryUrl + key + '=' + value 
         count = count + 1 
        else 
         @queryUrl = @queryUrl + '&' + key + '=' + value 
        end 
       end 
      end 
      return @queryUrl 
     end 

     def set_form_data(postParams, sep = '&') 
      self.body = postUrlBuilder(postParams) 
      self.content_type = 'application/x-www-form-urlencoded' 
     end 
     alias form_data= set_form_data 
    end 
end 

をそれから私は自分のpostメソッドを書いた:

def monkey_patch_post_request(postParams) 
     url = URI.parse(@monkeyPatchUrl)  
     req = Net::HTTP::Post.new(url.path) 
     req.basic_auth @companyId, @apiKey 
     req.set_form_data(postParams, sep = '&') 
     sock = Net::HTTP.new(url.host, 443) 
     sock.use_ssl = true 
     sock.ssl_version='SSLv3' 
     sock.start do |http| 
      response = http.request(req) 
      return response.body 
     end 
    end 

これは役立つはず!

関連する問題