OkHttp
16lz
2021-01-24
Recently I want write a program to get about 10G domain in China. well, I need a good tool to help me. and that isOkHttp . OkHttp is a third-party library developed by Square for sending and receive HTTP-based network requests.
here is my code.
package com.yc.url;import java.io.File;import java.io.IOException;import java.util.Map;import java.util.concurrent.TimeUnit;import com.google.gson.Gson;import okhttp3.*;public class OkHttpTest {/* * some details not mentioned here, include * (pose stream, post a file, cancel a call, Pre-call configuration, handle authentication(like ftp authentication)) * last-modify: 2016-5-30 18:02:22 * author: jack */public static void main(String[] args) throws IOException {//SynchronousGet();//AsynchronousGet();// AccessingHeaders();//PostingParams(); //ParseJson();//CacheResponse();Configuration();}private static void Configuration() throws IOException{OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(5, TimeUnit.SECONDS).writeTimeout(5, TimeUnit.SECONDS).readTimeout(5, TimeUnit.SECONDS).build();Request requese = new Request.Builder().url("http://httpbin.org/delay/2").build();Response response = client.newCall(requese).execute();System.out.println("Response completed : " + response);}/* * use the cache * in the cache directory, it will a journal file, it let me remember the DiskLruCache. * Console Result: Response 1 response: Response{protocol=http/1.1, code=200, message=OK, url=https://www.wikipedia.org/}Response 1 cache response: nullResponse 1 network response: Response{protocol=http/1.1, code=200, message=OK, url=https://www.wikipedia.org/}Response 2 response: Response{protocol=http/1.1, code=200, message=OK, url=https://www.wikipedia.org/}Response 2 cache response: Response{protocol=http/1.1, code=200, message=OK, url=https://www.wikipedia.org/}Response 2 network response: Response{protocol=http/1.1, code=304, message=Not Modified, url=https://www.wikipedia.org/}Response 2 equals Response 1? true */private static void CacheResponse() throws IOException{File cacheDirectory = new File("L:\\cache"); int cacheSize = 10 * 1024 * 1024;Cache cache = new Cache(cacheDirectory, cacheSize);OkHttpClient client = new OkHttpClient().newBuilder().cache(cache).build();Request request = new Request.Builder().url("https://www.wikipedia.org/").build();Response response = client.newCall(request).execute();if(!response.isSuccessful()) throw new IOException("Unexcepted code " + response);String body1 = response.body().string();System.out.println("Response 1 response: " + response);System.out.println("Response 1 cache response: " + response.cacheResponse());System.out.println("Response 1 network response: " + response.networkResponse());Response again = client.newCall(request).execute();String body2 = again.body().string();if(!again.isSuccessful()) throw new IOException("Unexcepted code " + again);System.out.println("Response 2 response: " + again);System.out.println("Response 2 cache response: " + again.cacheResponse());System.out.println("Response 2 network response: " + again.networkResponse());System.out.println("Response 2 equals Response 1? " + body1.equals(body2));}private static void ParseJson() throws IOException {OkHttpClient client = new OkHttpClient();Gson gson = new Gson();Request request = new Request.Builder().url("https://api.github.com/gists/c2a7c39532239ff261be").build();Response response = client.newCall(request).execute();if (!response.isSuccessful())throw new IOException("Unexpected code " + response);Gist gist = gson.fromJson(response.body().charStream(), Gist.class);for(Map.Entry entry : gist.files.entrySet()){System.out.println(entry.getKey());System.out.println(entry.getValue().content);}}static class Gist {Map files;}static class GistFile {String content;}/** * use the wikipedia to search some word * @throws IOException */private static void PostingParams() throws IOException {OkHttpClient client = new OkHttpClient();RequestBody body = new FormBody.Builder().add("search", "NBA").build();Request request = new Request.Builder().url("https://wikipedia.org/w/index.php").post(body).build();Response response = client.newCall(request).execute();if (!response.isSuccessful())throw new IOException("Unexpected code " + response);System.out.println(response.body().string());}/** * Accessing Headers * * @throws IOException * */private static void AccessingHeaders() throws IOException {OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url("http://blog.csdn.net/lmj623565791/article/details/47911083").header("User-Agent", "OkHttp Headers.java").addHeader("Accept", "application/json; q=0.5").addHeader("Accept", "application/vnd.github.v3+json").build();Response response = client.newCall(request).execute();if (!response.isSuccessful())throw new IOException("Unexcepted code " + response);System.out.println("Server:" + response.header("Server"));System.out.println("Date:" + response.header("Date"));System.out.println("Vary:" + response.header("Vary"));Headers headers = response.headers();for (int i = 0; i < headers.size(); i++) {System.out.println(headers.name(i) + ":" + headers.value(i));}}/** * Asynchronous Get Download a file on a worker thread, and get called back * when the response is readable. The callback is made after the response * headers are ready. Reading the response body may still block. OkHttp * doesn't currently offer asynchronous APIs to receive a response body in * parts. */private static void AsynchronousGet() {OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url("http://blog.csdn.net/lmj623565791/article/details/47911083").build();client.newCall(request).enqueue(new Callback() { // enqueue for// asynchronous@Overridepublic void onFailure(Call arg0, IOException arg1) {System.out.println("failure------------");}@Overridepublic void onResponse(Call call, Response response) throws IOException {if (response.isSuccessful()) {Headers headers = response.headers();for (int i = 0; i < headers.size(); i++) {System.out.println(headers.name(i) + ":" + headers.value(i));}System.out.println("receivedResponseAtMillis" + response.receivedResponseAtMillis());System.out.println("sentRequestAtMillis" + response.sentRequestAtMillis());System.out.println("message" + response.message());System.out.println("protocol" + response.protocol());System.out.println("request" + response.request());System.out.println("body" + response.body());}}});}/** * Synchronous Get Download a file, print its headers, and print its * response body as a string. The string() method on response body is * convenient and efficient for small documents. But if the response body is * large (greater than 1 MiB), avoid string() because it will load the * entire document into memory. In that case, prefer to process the body as * a stream. * * @throws IOException */private static void SynchronousGet() throws IOException {OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url("http://publicobject.com/helloworld.txt").build();Response response = client.newCall(request).execute(); // execute =// synchronousif (!response.isSuccessful())throw new IOException("Unexpected code " + response);Headers responseHeaders = response.headers();for (int i = 0; i < responseHeaders.size(); i++) {System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));}System.out.println(response.body().string());}}
from https://github.com/square/okhttp/wiki/Recipes
I'm fish, I'm on.
更多相关文章
- 代码中设置drawableleft
- android 3.0 隐藏 系统标题栏
- Android开发中activity切换动画的实现
- Android(安卓)学习 笔记_05. 文件下载
- Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
- 技术博客汇总
- android 2.3 wifi (一)
- AndRoid Notification的清空和修改
- Android中的Chronometer