Apache HttpComponents Client
============================

Welcome to the HttpClient component of the Apache HttpComponents project.

Building Instructions
---------------------

For building from source instructions please refer to BUILDING.txt.

Dependencies
------------

HttpClient main module requires Java 7 compatible runtime and
depends on the following external libraries:

* Apache HttpComponents HttpCore
* Apache Logging Log4j2 API
* Apache Commons Codec

Other dependencies are optional.

(for detailed information on external dependencies please see pom.xml)

Licensing
---------

Apache HttpComponents Client is licensed under the Apache License 2.0.
See the files called LICENSE.txt and NOTICE.txt for more information.

Cryptographic Software Notice
-----------------------------

This distribution may include software that has been designed for use
with cryptographic software. The country in which you currently reside
may have restrictions on the import, possession, use, and/or re-export
to another country, of encryption software. BEFORE using any encryption
software, please check your country's laws, regulations and policies
concerning the import, possession, or use, and re-export of encryption
software, to see if this is permitted. See <http://www.wassenaar.org/>
for more information.

The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms. The form and manner of this Apache Software Foundation
distribution makes it eligible for export under the License Exception
ENC Technology Software Unrestricted (TSU) exception (see the BIS
Export Administration Regulations, Section 740.13) for both object
code and source code.

The following provides more details on the included software that
may be subject to export controls on cryptographic software:

  Apache HttpComponents Client interfaces with the
  Java Secure Socket Extension (JSSE) API to provide

    - HTTPS support

  Apache HttpComponents Client does not include any
  implementation of JSSE.

Contact
-------

  o For general information visit the main project site at
    http://hc.apache.org/

  o For current status information visit the status page at
    http://hc.apache.org/status.html
