接口OkHttp系列(一)- 简介、安装部署、Get请求、Post请求

2022-07-25 17:22:40 浏览数 (1)

接口OkHttp系列(一)

简介、安装部署、Get请求、Post请求

目录

  • 1、简介
  • 2、安装部署
  • 3、Get请求
    • 3.1、无参数
    • 3.2、有参数(拼接方式)
    • 3.3、有参数(添加参数)
  • 4、Post请求
    • 4.1、无参数
    • 4.2、有参数

1、简介

HTTP是现在主流应用使用的网络请求方式,用来交换数据和内容。OkHttp是一个很棒的适用于Android和Java应用程序的HTTP和HTTP/2客户端,它是一个第三方类库,由移动支付Square公司贡献,这是一个开源项目,用于替代HttpUrlConnection和Apache HttpClient。

官方网址:https://square.github.io/okhttp

官方github地址:https://github.com/square/okhttp

2、安装部署

使用OkHttp需要下载okhttp和okio两个jar包。

下载okhttp:

下载地址:

http://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp

下载okio:

下载地址:

http://mvnrepository.com/artifact/com.squareup.okio/okio

本系列篇章okhttp使用okhttp-3.10.0.jar包。

本系列篇章okio使用okio-1.14.0.jar包。

将下载的jar包引用到项目里就可以使用OkHttp了。

由于本系列篇章还会用到Json,所以要下载Json包。

下载Json:

下载地址:

http://mvnrepository.com/artifact/org.json/json

同样将下载的Json包引用到项目里。

本系列篇章接口请求链接使用moco生成。

如图所示:需要用到moco包和Json配置文件(已经配置完成)。

启动moco服务:

命令行进入moco包所在目录。

输入 java -jar moco-runner-0.12.0-standalone.jar http -p 8083 -c mymoco.json

如图所示:moco服务开启,就可以使用接口请求链接了。

3、Get请求

3.1、无参数

1、创建Get类。

没有参数,直接发送请求链接地址。

创建Request对象,使用get方法。

脚本代码:

代码语言:javascript复制
package com.test.demo;
 
import java.io.IOException;
import java.util.concurrent.TimeUnit;
 
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
 
/**
 * Get请求(没有参数)
 *
 * @author wangmcn
 *
 */
public class Get {
 
       public static void main(String[] args) throws IOException {
 
              final int CONNECT_TIMEOUT = 30;
              final int READ_TIMEOUT = 30;
              final int WRITE_TIMEOUT = 30;
             
              // 创建OkHttpClient对象
              OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 设置连接超时时间
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读超时时间
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) // 设置写超时时间
                            .retryOnConnectionFailure(true) // 是否自动重连
                            .build();
 
              // 创建Request对象
              Request request = new Request.Builder()
                            .url("http://localhost:8083/getdemo")
                            .get()
                            .build();
 
              // 得到Response对象
              Response response = client.newCall(request).execute();
             
              if(response.isSuccessful()){
                     System.out.println("获取响应状态: "   response.code());
                     System.out.println("获取响应信息: "   response.message());
                     System.out.println("获取网页源码: "   response.body().string());
              }
             
              // 清除并关闭线程池
              client.dispatcher().executorService().shutdown();
              // 清除并关闭连接池
              client.connectionPool().evictAll();
 
       }
 
}

2、运行结果:

3.2、有参数(拼接方式)

1、创建Get2类。

有参数,请求链接为url(http://localhost:8083/getdemo2)与参数

(?username=admin&password=123456)拼接方式。

创建Request对象,使用get方法。

脚本代码:

代码语言:javascript复制
package com.test.demo;
 
import java.io.IOException;
import java.util.concurrent.TimeUnit;
 
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
 
/**
 * Get请求(有参数,请求为url与参数拼接方式)
 *
 * @author wangmcn
 *
 */
public class Get2 {
 
       public static void main(String[] args) throws IOException {
 
              final int CONNECT_TIMEOUT = 30;
              final int READ_TIMEOUT = 30;
              final int WRITE_TIMEOUT = 30;
             
              // 创建OkHttpClient对象
              OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 设置连接超时时间
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读超时时间
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) // 设置写超时时间
                            .retryOnConnectionFailure(true) // 是否自动重连
                            .build();
 
              // 创建Request对象
              Request request = new Request.Builder()
                            .url("http://localhost:8083/getdemo2?username=admin&password=123456")
                            .get()
                            .build();
             
              // 得到Response对象
              Response response = client.newCall(request).execute();
             
              if(response.isSuccessful()){
                     System.out.println("获取响应状态: "   response.code());
                     System.out.println("获取响应信息: "   response.message());
                     System.out.println("获取网页源码: "   response.body().string());
              }
             
              // 清除并关闭线程池
              client.dispatcher().executorService().shutdown();
              // 清除并关闭连接池
              client.connectionPool().evictAll();
 
       }
 
}

2、运行结果:

3.3、有参数(添加参数)

1、创建Get3类。

有参数,创建HttpUrl对象,添加参数。

创建Request对象,使用get方法。

脚本代码:

代码语言:javascript复制
package com.test.demo;
 
import java.io.IOException;
import java.util.concurrent.TimeUnit;
 
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
 
/**
 * Get请求(有参数,创建HttpUrl对象,添加参数)
 *
 * @author wangmcn
 *
 */
public class Get3 {
 
       public static void main(String[] args) throws IOException {
 
              final int CONNECT_TIMEOUT = 30;
              final int READ_TIMEOUT = 30;
              final int WRITE_TIMEOUT = 30;
             
              // 创建OkHttpClient对象
              OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 设置连接超时时间
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读超时时间
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) // 设置写超时时间
                            .retryOnConnectionFailure(true) // 是否自动重连
                            .build();
             
              // 创建HttpUrl对象,添加参数
              HttpUrl.Builder urlBuilder = HttpUrl.parse("http://localhost:8083/getdemo2").newBuilder();
              urlBuilder.addQueryParameter("username", "admin");
              urlBuilder.addQueryParameter("password", "123456");
             
              // 创建Request对象
              Request request = new Request.Builder()
                            .url(urlBuilder.toString())
                            .get()
                            .build();
             
              // 得到Response对象
              Response response = client.newCall(request).execute();
             
              if(response.isSuccessful()){
                     System.out.println("获取响应状态: "   response.code());
                     System.out.println("获取响应信息: "   response.message());
                     System.out.println("获取网页源码: "   response.body().string());
              }
             
              // 清除并关闭线程池
              client.dispatcher().executorService().shutdown();
              // 清除并关闭连接池
              client.connectionPool().evictAll();
 
       }
 
}

2、运行结果:

4、Post请求

4.1、无参数

1、创建Post类。

创建Request对象,使用post方法。

脚本代码:

代码语言:javascript复制
package com.test.demo;
 
import java.io.IOException;
import java.util.concurrent.TimeUnit;
 
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
 
/**
 * Post请求(没有参数)
 *
 * @author wangmcn
 *
 */
public class Post {
 
       public static void main(String[] args) throws IOException {
 
              final int CONNECT_TIMEOUT = 30;
              final int READ_TIMEOUT = 30;
              final int WRITE_TIMEOUT = 30;
             
              // 创建OkHttpClient对象
              OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 设置连接超时时间
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读超时时间
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) // 设置写超时时间
                            .retryOnConnectionFailure(true) // 是否自动重连
                            .build();
 
              // 创建Request对象
              Request request = new Request.Builder()
                            .url("http://localhost:8083/postdemo")
                            .post(RequestBody.create(null, ""))
                            .build();
             
              // 得到Response对象
              Response response = client.newCall(request).execute();
             
              if(response.isSuccessful()){
                     System.out.println("获取响应状态: "   response.code());
                     System.out.println("获取响应信息: "   response.message());
                     System.out.println("获取网页源码: "   response.body().string());
              }
             
              // 清除并关闭线程池
              client.dispatcher().executorService().shutdown();
              // 清除并关闭连接池
              client.connectionPool().evictAll();
 
       }
 
}

2、运行结果:

4.2、有参数

1、创建Post2类。

创建FormBody对象,添加参数。

创建Request对象,使用post方法。

脚本代码:

代码语言:javascript复制
package com.test.demo;
 
import java.io.IOException;
import java.util.concurrent.TimeUnit;
 
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
 
/**
 * Post请求(有参数)
 *
 * @author wangmcn
 *
 */
public class Post2 {
 
       public static void main(String[] args) throws IOException {
 
              final int CONNECT_TIMEOUT = 30;
              final int READ_TIMEOUT = 30;
              final int WRITE_TIMEOUT = 30;
             
              // 创建OkHttpClient对象
              OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS) // 设置连接超时时间
                            .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS) // 设置读超时时间
                            .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS) // 设置写超时时间
                            .retryOnConnectionFailure(true) // 是否自动重连
                            .build();
 
              // 创建FormBody对象,添加参数
              FormBody body = new FormBody.Builder()
                            .add("username", "admin")
                            .add("password", "123456")
                            .build();
 
              // 创建Request对象
              Request request = new Request.Builder()
                            .url("http://localhost:8083/postdemo2")
                            .post(body)
                            .build();
             
              // 得到Response对象
              Response response = client.newCall(request).execute();
             
              if(response.isSuccessful()){
                     System.out.println("获取响应状态: "   response.code());
                     System.out.println("获取响应信息: "   response.message());
                     System.out.println("获取网页源码: "   response.body().string());
              }
             
              // 清除并关闭线程池
              client.dispatcher().executorService().shutdown();
              // 清除并关闭连接池
              client.connectionPool().evictAll();
 
       }
 
}

2、运行结果:

0 人点赞