#   Licensed to the Apache Software Foundation (ASF) under one or more
#   contributor license agreements.  See the NOTICE file distributed with
#   this work for additional information regarding copyright ownership.
#   The ASF licenses this file to You under the Apache License, Version 2.0
#   (the "License"); you may not use this file except in compliance with
#   the License.  You may obtain a copy of the License at
# 
#       http://www.apache.org/licenses/LICENSE-2.0
# 
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

# Properties file used to define additional default Commons HttpClient parameters
#
# See: http://hc.apache.org/httpclient-3.x/preference-api.html
#
# This file is enabled by setting the JMeter property: httpclient.parameters.file
# entries are of the form:
#
# property=value (for strings)
# property$Type=value (for other types)
#
# where Type can be:
# Integer
# Long
# Boolean
# HttpVersion
# 
# N.B. Other types are not yet implemented, so not all parameters are supported
#

# Examples:

#http.protocol.version$HttpVersion=1.0

#http.protocol.element-charset=ISO-8859-1

#http.socket.timeout$Integer=10000

#http.protocol.reject-relative-redirect$Boolean=true

#http.authentication.preemptive$Boolean=true