化身天使的博客

19.java网络编程

okHttp

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

请求

创建OkHttpClient
构造Request ,默认get请求

Request.Builder().url(url).build();

get

同步

        private final OkHttpClient client = new OkHttpClient();
        String result;
        Request request = new Request.Builder().url(url).build(); //构建请求
        try (Response response = client.newCall(request).execute()) {
                if (!response.isSuccessful()) {
                    log.error("address:{},请求失败{}",address,response.code());
                }
                result=response.body().string();
        }catch (Exception e) {
            log.error("address:{},请求失败{}",address,e.getMessage());
            return null;
        }

异步

    client.newCall(request).enqueue(new Callback() {
        @Override public void onFailure(Call call, IOException e) {
            log.error("请求失败,e:{}",e.getMessage());
        }

        @Override public void onResponse(Call call, Response response) throws IOException {
            try (ResponseBody responseBody = response.body()) {
            if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);


            }
        }
    });

post

    public static final MediaType JSON = MediaType.get("application/json");
    String jsonStr="";
    RequestBody requestBody = RequestBody.create(jsonStr, JSON)
    Request request = new Request.Builder().post(requestBody).url(url).build(); 

构建请求

设置请求头

  • header 会覆盖已有的键
  • addHeader 不会覆盖已有的
    Request request = new Request.Builder()
        .url(url)
        .header("User-Agent", "会覆盖已有的")
        .addHeader("Accept", "不会覆盖已有的")
        .addHeader("Accept", "application/vnd.github.v3+json")
        .build();

响应

数据

ResponseBody responseBody = response.body()
responseBody.string()  //转字符串

响应头

  • 获取全部响应头
    • Map<nameList,valueList> response.headers();
        Headers responseHeaders = response.headers();
        for (int i = 0; i < responseHeaders.size(); i++) {
          System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
        }
    
  • 获取指定响应头
    • 如果有多个同名的健, 获取最后一个
      • response.header("Server")
    • 获取全部同名的, 写到列表,最后多个s
      • response.headers("Server")
posted @ 2024-01-25 19:39  化身天使  阅读(23)  评论(0)    收藏  举报