aboutsummaryrefslogtreecommitdiffstats
path: root/okcurl/src
diff options
context:
space:
mode:
authorNeil Fuller <nfuller@google.com>2015-01-20 09:39:41 +0000
committerNeil Fuller <nfuller@google.com>2015-01-20 12:01:46 +0000
commite78f117bcbd6b57d783737107f445ef75ecb474a (patch)
tree6aeb5ecee431742785d8196f39eace37c7a87e63 /okcurl/src
parent686cfbde70b55b77360f3401dedf580eea6d47f9 (diff)
downloadandroid_external_okhttp-e78f117bcbd6b57d783737107f445ef75ecb474a.tar.gz
android_external_okhttp-e78f117bcbd6b57d783737107f445ef75ecb474a.tar.bz2
android_external_okhttp-e78f117bcbd6b57d783737107f445ef75ecb474a.zip
Pull latest OkHttp code from upstream
okio: okio is now managed upstream as a separate project but has been included here as a sub directory: the okio version here is intended only for use with OkHttp. okio is synced to upstream commit 82358df7f09e18aa42348836c614212085bbf045. See okio/README.android for local changed needed to make it compile. okhttp: This is effectively an upgrade from a snapshot close to OkHttp 1.5 with Android additions to a snapshot close to OkHttp 2.2. okhttp was synced to upstream commit 0a197466608681593cc9be9487965a0b1d5c244c See README.android for local changes needed to make it compile. Most of the old Android changes have been pushed upstream and other upstream changes have been made to keep OkHttp working on Android. TLS fallback changes have not been upstreamed yet: bcce0a3d26d66d33beb742ae2adddb3b7db5ad08 ede2bf1af0917482da8ccb7b048130592034253d This means that some CTS tests will start to fail. A later commit will fix those changes when it has been accepted upstream. There are associated changes in libcore and frameworks/base. Change-Id: I0a68b27b1ec7067be452671bc591edfd84e310f2
Diffstat (limited to 'okcurl/src')
-rw-r--r--okcurl/src/main/java/com/squareup/okhttp/curl/Main.java78
-rw-r--r--okcurl/src/test/java/com/squareup/okhttp/curl/MainTest.java26
2 files changed, 68 insertions, 36 deletions
diff --git a/okcurl/src/main/java/com/squareup/okhttp/curl/Main.java b/okcurl/src/main/java/com/squareup/okhttp/curl/Main.java
index 9a45f20..e1054c9 100644
--- a/okcurl/src/main/java/com/squareup/okhttp/curl/Main.java
+++ b/okcurl/src/main/java/com/squareup/okhttp/curl/Main.java
@@ -15,16 +15,18 @@
*/
package com.squareup.okhttp.curl;
-import com.google.common.base.Function;
import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
import com.squareup.okhttp.ConnectionPool;
import com.squareup.okhttp.Headers;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Protocol;
import com.squareup.okhttp.Request;
+import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
+import com.squareup.okhttp.internal.http.StatusLine;
+import com.squareup.okhttp.internal.spdy.Http20Draft16;
+
import io.airlift.command.Arguments;
import io.airlift.command.Command;
import io.airlift.command.HelpOption;
@@ -34,13 +36,20 @@ import java.io.IOException;
import java.io.InputStream;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
-import java.util.Arrays;
import java.util.List;
import java.util.Properties;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
+import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
+import okio.Okio;
import static java.util.concurrent.TimeUnit.SECONDS;
@@ -70,12 +79,7 @@ public class Main extends HelpOption implements Runnable {
}
private static String protocols() {
- return Joiner.on(", ").join(Lists.transform(Arrays.asList(Protocol.values()),
- new Function<Protocol, String>() {
- @Override public String apply(Protocol protocol) {
- return protocol.name.utf8();
- }
- }));
+ return Joiner.on(", ").join(Protocol.values());
}
@Option(name = { "-X", "--request" }, description = "Specify request command to use")
@@ -106,6 +110,9 @@ public class Main extends HelpOption implements Runnable {
@Option(name = { "-i", "--include" }, description = "Include protocol headers in the output")
public boolean showHeaders;
+ @Option(name = "--frames", description = "Log HTTP/2 frames to STDERR")
+ public boolean showHttp2Frames;
+
@Option(name = { "-e", "--referer" }, description = "Referer URL")
public String referer;
@@ -127,29 +134,26 @@ public class Main extends HelpOption implements Runnable {
return;
}
+ if (showHttp2Frames) {
+ enableHttp2FrameLogging();
+ }
+
client = createClient();
Request request = createRequest();
try {
- Response response = client.execute(request);
+ Response response = client.newCall(request).execute();
if (showHeaders) {
- System.out.println(response.statusLine());
+ System.out.println(StatusLine.get(response));
Headers headers = response.headers();
- for (int i = 0, count = headers.size(); i < count; i++) {
+ for (int i = 0, size = headers.size(); i < size; i++) {
System.out.println(headers.name(i) + ": " + headers.value(i));
}
System.out.println();
}
- Response.Body body = response.body();
- byte[] buffer = new byte[1024];
- while (body.ready()) {
- int c = body.byteStream().read(buffer);
- if (c == -1) {
- return;
- }
- System.out.write(buffer, 0, c);
- }
- body.close();
+ response.body().source().readAll(Okio.sink(System.out));
+ response.body().close();
+ System.out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
@@ -159,7 +163,7 @@ public class Main extends HelpOption implements Runnable {
private OkHttpClient createClient() {
OkHttpClient client = new OkHttpClient();
- client.setFollowProtocolRedirects(followRedirects);
+ client.setFollowSslRedirects(followRedirects);
if (connectTimeout != DEFAULT_TIMEOUT) {
client.setConnectTimeout(connectTimeout, SECONDS);
}
@@ -168,6 +172,7 @@ public class Main extends HelpOption implements Runnable {
}
if (allowInsecure) {
client.setSslSocketFactory(createInsecureSslSocketFactory());
+ client.setHostnameVerifier(createInsecureHostnameVerifier());
}
// If we don't set this reference, there's no way to clean shutdown persistent connections.
client.setConnectionPool(ConnectionPool.getDefault());
@@ -184,7 +189,7 @@ public class Main extends HelpOption implements Runnable {
return "GET";
}
- private Request.Body getRequestBody() {
+ private RequestBody getRequestBody() {
if (data == null) {
return null;
}
@@ -202,7 +207,7 @@ public class Main extends HelpOption implements Runnable {
}
}
- return Request.Body.create(MediaType.parse(mimeType), bodyData);
+ return RequestBody.create(MediaType.parse(mimeType), bodyData);
}
Request createRequest() {
@@ -213,7 +218,7 @@ public class Main extends HelpOption implements Runnable {
if (headers != null) {
for (String header : headers) {
- String[] parts = header.split(":", -1);
+ String[] parts = header.split(":", 2);
request.header(parts[0], parts[1]);
}
}
@@ -251,4 +256,25 @@ public class Main extends HelpOption implements Runnable {
throw new AssertionError(e);
}
}
+
+ private static HostnameVerifier createInsecureHostnameVerifier() {
+ return new HostnameVerifier() {
+ @Override public boolean verify(String s, SSLSession sslSession) {
+ return true;
+ }
+ };
+ }
+
+ private static void enableHttp2FrameLogging() {
+ Logger logger = Logger.getLogger(Http20Draft16.class.getName() + "$FrameLogger");
+ logger.setLevel(Level.FINE);
+ ConsoleHandler handler = new ConsoleHandler();
+ handler.setLevel(Level.FINE);
+ handler.setFormatter(new SimpleFormatter() {
+ @Override public String format(LogRecord record) {
+ return String.format("%s%n", record.getMessage());
+ }
+ });
+ logger.addHandler(handler);
+ }
}
diff --git a/okcurl/src/test/java/com/squareup/okhttp/curl/MainTest.java b/okcurl/src/test/java/com/squareup/okhttp/curl/MainTest.java
index 6a5b972..0cc065c 100644
--- a/okcurl/src/test/java/com/squareup/okhttp/curl/MainTest.java
+++ b/okcurl/src/test/java/com/squareup/okhttp/curl/MainTest.java
@@ -16,8 +16,9 @@
package com.squareup.okhttp.curl;
import com.squareup.okhttp.Request;
+import com.squareup.okhttp.RequestBody;
import java.io.IOException;
-import okio.OkBuffer;
+import okio.Buffer;
import org.junit.Test;
import static com.squareup.okhttp.curl.Main.fromArgs;
@@ -32,16 +33,16 @@ public class MainTest {
assertNull(request.body());
}
- @Test public void put() {
+ @Test public void put() throws IOException {
Request request = fromArgs("-X", "PUT", "http://example.com").createRequest();
assertEquals("PUT", request.method());
assertEquals("http://example.com", request.urlString());
- assertNull(request.body());
+ assertEquals(0, request.body().contentLength());
}
@Test public void dataPost() {
Request request = fromArgs("-d", "foo", "http://example.com").createRequest();
- Request.Body body = request.body();
+ RequestBody body = request.body();
assertEquals("POST", request.method());
assertEquals("http://example.com", request.urlString());
assertEquals("application/x-form-urlencoded; charset=utf-8", body.contentType().toString());
@@ -50,7 +51,7 @@ public class MainTest {
@Test public void dataPut() {
Request request = fromArgs("-d", "foo", "-X", "PUT", "http://example.com").createRequest();
- Request.Body body = request.body();
+ RequestBody body = request.body();
assertEquals("PUT", request.method());
assertEquals("http://example.com", request.urlString());
assertEquals("application/x-form-urlencoded; charset=utf-8", body.contentType().toString());
@@ -60,7 +61,7 @@ public class MainTest {
@Test public void contentTypeHeader() {
Request request = fromArgs("-d", "foo", "-H", "Content-Type: application/json",
"http://example.com").createRequest();
- Request.Body body = request.body();
+ RequestBody body = request.body();
assertEquals("POST", request.method());
assertEquals("http://example.com", request.urlString());
assertEquals("application/json; charset=utf-8", body.contentType().toString());
@@ -83,12 +84,17 @@ public class MainTest {
assertNull(request.body());
}
- private static String bodyAsString(Request.Body body) {
+ @Test public void headerSplitWithDate() {
+ Request request = fromArgs("-H", "If-Modified-Since: Mon, 18 Aug 2014 15:16:06 GMT",
+ "http://example.com").createRequest();
+ assertEquals("Mon, 18 Aug 2014 15:16:06 GMT", request.header("If-Modified-Since"));
+ }
+
+ private static String bodyAsString(RequestBody body) {
try {
- OkBuffer buffer = new OkBuffer();
+ Buffer buffer = new Buffer();
body.writeTo(buffer);
- return new String(buffer.readByteString(buffer.size()).toByteArray(),
- body.contentType().charset());
+ return buffer.readString(body.contentType().charset());
} catch (IOException e) {
throw new RuntimeException(e);
}