Allow callers to pass in a custom host resolver implementation.

An HTTP client interacts with the network in two main ways: DNS
lookups and connections to HTTP servers. OkHttp already abstracts
the latter by allowing callers to pass in custom SocketFactory
objects, but does not yet abstract the former.

This change takes the existing internal Dns interface, which is
currently used for testing, and turns it into a publicly
accessible HostResolver interface. This allows callers to
completely abstract all network interaction points.

Examples of what this can be used for:

1. Use alternative DNS implementations with different
   performance / caching / ordering / parallelization / ...
   characteristics than standard InetAddress.getAllByName.
2. Resolve hosts using different DNS servers than the system
   resolvers, or even non-DNS protocols (e.g., MDNS or even
   NetBIOS/WINS) that are not supported by the system resolver.
3. Do DNS lookups on specific networks, similarly to what
   android_getaddrinfofornet does.

Backport of upstream change:
https://github.com/square/okhttp/commit/b19860c9297197a5055ac2ffd6edaedf693c1a85

Change-Id: I6e488acd938067e4c078c6ffe4d5eddb5f3951de
5 files changed
tree: c5fa1539aeaa88237483901e406b07417a43e1e3
  1. android/
  2. benchmarks/
  3. mockwebserver/
  4. okcurl/
  5. okhttp/
  6. okhttp-apache/
  7. okhttp-tests/
  8. okio/
  9. samples/
  10. website/
  11. Android.mk
  12. build.gradle
  13. CHANGELOG.md
  14. checkstyle.xml
  15. concurrency.md
  16. CONTRIBUTING.md
  17. deploy_website.sh
  18. jarjar-rules.txt
  19. LICENSE.txt
  20. MODULE_LICENSE_APACHE2
  21. pom.xml
  22. README.android
  23. README.md
README.md

OkHttp

An HTTP & SPDY client for Android and Java applications.

For more information please see the website.

Download

Download the latest JAR or grab via Maven:

<dependency>
    <groupId>com.squareup.okhttp</groupId>
    <artifactId>okhttp</artifactId>
    <version>(insert latest version)</version>
</dependency>

Building

OkHttp requires Java 7 to build and run tests. Runtime compatibility with Java 6 is enforced as part of the build to ensure compliance with Android and older versions of the JVM.

Testing

On the Desktop

Run OkHttp tests on the desktop with Maven. Running SPDY tests on the desktop uses Jetty-NPN which requires OpenJDK 7+.

mvn clean test

On a Device

OkHttp's test suite creates an in-process HTTPS server. Prior to Android 2.3, SSL server sockets were broken, and so HTTPS tests will time out when run on such devices.

Test on a USB-attached Android using Vogar. Unfortunately dx requires that you build with Java 6, otherwise the test class will be silently omitted from the .dex file.

mvn clean
mvn package -DskipTests
vogar \
    --classpath ~/.m2/repository/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.jar \
    --classpath mockwebserver/target/mockwebserver-2.0.0-SNAPSHOT.jar \
    --classpath okhttp-protocols/target/okhttp-protocols-2.0.0-SNAPSHOT.jar \
    --classpath okhttp/target/okhttp-2.0.0-SNAPSHOT.jar \
    okhttp/src/test

MockWebServer

A library for testing HTTP, HTTPS, HTTP/2.0, and SPDY clients.

MockWebServer coupling with OkHttp is essential for proper testing of SPDY and HTTP/2.0 so that code can be shared.

Download

Download the latest JAR or grab via Maven:

<dependency>
    <groupId>com.squareup.okhttp</groupId>
    <artifactId>mockwebserver</artifactId>
    <version>(insert latest version)</version>
    <scope>test</scope>
</dependency>

License

Licensed 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.