美文网首页
网络请求-okhttp

网络请求-okhttp

作者: 飞奔吧牛牛 | 来源:发表于2018-09-05 16:00 被阅读0次

下载jar包

官网:http://square.github.io/okhttp/
okhttp-3.11.0.jar
okio-2.0.0-RC1.jar

HTTP请求

get

private String get(String url) throws IOException {
        Request request = new Request.Builder().url(url).build();
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            return response.body().string();
        } else {
            throw new IOException("Unexpected code" + response);
        }
    }

post

post提交json
MediaType json = MediaType.parse("application/json; charset=utf-8");
private String post(String url, String content) throws IOException {
        RequestBody requestBody = RequestBody.create(json, content);
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            return response.body().string();
        } else {
            throw new IOException("Unexpected code" + response);
        }
    }
post提交文件
public static final MediaType MEDIA_TYPE_MARKDOWN
            = MediaType.parse("text/x-markdown; charset=utf-8");
public String postFile(String url, File file) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))
                .build();
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            return response.body().string();
        } else {
            throw new IOException("Unexpected code " + response);
        }
    }
post提交表单参数(就是普通的post请求)
public String postForm(String url) throws IOException {
        FormBody formBody = new FormBody.Builder()
                .add("username", "Tom")
                .add("password", "123")
                .build();
        Request request = new Request.Builder()
                .url(url)
                .post(formBody)
                .build();
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            return response.body().string();
        } else {
            throw new IOException("Unexpected code " + response);
        }
    }
post同时提交文件和表单参数
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
public String postMultipartBody(String url, File file) throws IOException {

        MultipartBody multipartBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("title", "logo")
                .addFormDataPart("image", "logo.png", RequestBody.create(MEDIA_TYPE_PNG, file))
                .build();
        Request request = new Request.Builder()
                .url(url)
                .post(multipartBody)
                .build();
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            return response.body().string();
        } else {
            throw new IOException("Unexpected code " + response);
        }
    }

以上都是使用同步返回数据,若需要异步返回,请将execute()方法换成enqueue(callback)方法。

client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                ResponseBody responseBody = response.body();
                if (response.isSuccessful()) {
                    String result = responseBody.string();
                    // TODO: deal result

                } else {
                    throw new IOException("Unexpected code " + response);
                }
            }
        });

设置超时时间

//设置超时时间
    public void configureTimeouts() {
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .build();
    }

还可以为每一次请求设置超时时间

 public void configureCallTimeouts() throws IOException {
        Request request = new Request.Builder()
                .url("")
                .build();
        OkHttpClient client1 = this.client.newBuilder()
                .readTimeout(500, TimeUnit.MILLISECONDS)
                .build();
        Response response1 = client1.newCall(request).execute();

        OkHttpClient client2 = this.client.newBuilder()
                .readTimeout(3000, TimeUnit.MILLISECONDS)
                .build();
        Response response2 = client2.newCall(request).execute();
    }

addHeader

public void header(String url) throws IOException {
        Request request = new Request.Builder().url(url)
                .header("User-Agent", "OkHttp Header.java")
                .addHeader("Accept", "application/json: q=0.5")
                .addHeader("Accept", "application/vnd.github.v2+json")
                .build();
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            String header = response.header("");
            String string = response.body().string();
        } else {
            throw new IOException("Unexpected code " + response);
        }
    }

MediaType类型参考文章
参考Media TypesMIMe类型

相关文章

网友评论

      本文标题:网络请求-okhttp

      本文链接:https://www.haomeiwen.com/subject/fumawftx.html