def put(bucket, key, data=nil, headers={})
if (data.respond_to?(:binmode))
data.binmode
end
if data.is_a?(String)
data = StringIO.new(data)
end
data_size = data.respond_to?(:lstat) ? data.lstat.size :
(data.respond_to?(:size) ? data.size : 0)
if (data_size >= USE_100_CONTINUE_PUT_SIZE)
headers['expect'] = '100-continue'
end
req_hash = generate_rest_request('PUT', headers.merge(:url =>"#{bucket}/#{CGI::escape key}",
:data =>data,
'Content-Length' => data_size.to_s))
request_info(req_hash, RightHttp2xxParser.new)
rescue
on_exception
end