[Java]Http类库OkHttp使用举例

2021-03-09 85点热度 0人点赞 0条评论

前言

用Java来请求网络操作的使用,原生可以使用HttpURLConnection,但是原生的功能比较弱,这里推荐一个第三方的类库:OkHttp,它能将网络操作变得异常简单。

这里介绍下常见的Http操作,例如POST(FormData, JSON,XML,File)GET(普通,代理)等等

引入OKHttp依赖

如果是Maven,加入pom.xml:

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.9.0</version>
</dependency>

如果是Gradle,加入build.gradle

implementation("com.squareup.okhttp3:okhttp:4.9.0")

GET

OkHttpClient client = new OkHttpClient().newBuilder().build();
Request request = new Request.Builder().url("https://httpbin.org/get").build();
Response response = client.newCall(request).execute();

//response.body()还可以返回InputStream byteStream(),或者返回bytes[],但是注意可能body()会返回null
System.out.println(response.body().string());
//返回状态代码 200 等
System.out.println(response.code());

//或者使用try with resource的方式 
//try (Response response = client.newCall(request).execute()) {
//    System.out.println(response.body().string()); 
//}

使用代理的方式GET

java.net.Proxy proxy = new Proxy(Proxy.Type.SOCKS, new java.net.InetSocketAddress("127.0.0.1", 1080));
OkHttpClient client = new OkHttpClient().newBuilder().proxy(proxy).build();
Request request = new Request.Builder().url("http://ip-api.com/csv?fields=status,isp,query,country,city").build();
Response response = client.newCall(request).execute();
response.body();

POST Form Data 表单提交

OkHttpClient client = new OkHttpClient().newBuilder().build();
FormBody formBody = new FormBody.Builder()
        .add("xxx", "xxx")
        .add("message", message)
        .build();
Request request = new Request.Builder().url("https://www.example.com").post(formBody).build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());

POST JSON

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

public static void main(String[] args) throws Exception {
    String payload = "{\"no\": \"admin\", \"username\": \"Terry\"}";
    RequestBody body = RequestBody.create(JSON, payload);
    Request request = new Request.Builder()
            .url("http://example.com/post_url")
            .addHeader("Content-Type", "application/json; charset=utf-8")
            .post(body)
            .build();

    OkHttpClient client = new OkHttpClient().newBuilder().build();
    Response response = client.newCall(request).execute();
    response.body();

}

POST XML

这个只要把上面JSON的例子的Content-Type改成application/xml; charset=UTF-8,内容(Body)放XML就可以了。

POST File Multipart 上传文件

OkHttpClient client = new OkHttpClient().newBuilder().build();

File file = new File("/path/to/file.xlsx");

RequestBody requestBody = new MultipartBody.Builder()
        .setType(MultipartBody.FORM)
        .addFormDataPart("title", "销售表")
        .addFormDataPart("other_parameter", "other_parameter_value")
        .addFormDataPart("file", file.getName(),
                RequestBody.create(MediaType.parse("application/octet-stream"), file))
        .build();

Request request = new Request.Builder().url("https://www.example.com/post_file_url").post(requestBody).build();

Response response = client.newCall(request).execute();
response.body();

其他Methond(PUT,Delete)

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

String payload = "{\"no\": \"admin\", \"username\": \"Terry\"}";
RequestBody body =  RequestBody.create(JSON, payload);
OkHttpClient client = new OkHttpClient();
// DELETE or PUT
Request request = new Request.Builder().url(url).method("DELETE", body).build();
//or 
Request request = new Request.Builder().url("url").delete(body).build();
Response response = client.newCall(request).execute();

 

 

 

admin

这个人很懒,什么都没留下

文章评论

*

code