Kaze
Kaze
Published on 2022-03-06 / 62 Visits
0
0

java网络编程

  • 页面请求文本数据
public String getContent(String url) {
    OkHttpClient okHttpClient=new OkHttpClient();
    Request request=new Request.Builder().url(url).build();
    Call call=okHttpClient.newCall(request);
    String result=null;
    try {
      result=call.execute().body().string();
    } catch (IOException e) {
      System.out.println("request "+url+" error");
      e.printStackTrace();
    }
    return result;
}
 public static void main(String[] args) {
    GetPage getPage = new GetPage();
    String url ="" ;
    String content =getPage.getContent(url) ;

    System.out.println("API调用结果");
    System.out.println(content);

  }
  • 页面请求二进制数据

    public byte[] getContent(String url) {
        OkHttpClient okHttpClient=new OkHttpClient();
        Request request=new Request.Builder().url(url).build();
        Call call=okHttpClient.newCall(request);
        byte[] result=null;
        try {
          result=call.execute().body().byte();
        } catch (IOException e) {
          System.out.println("request "+url+" error");
          e.printStackTrace();
        }
        return result;
    }
    
    

依赖:

<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
 <groupId>com.squareup.okhttp3</groupId>
 <artifactId>okhttp</artifactId>
 <version>4.1.0</version>
</dependency>
  • okhttp3中的post操作

    1. post表单数据
    public String postContent(String url, Map<String, String> formData) {
        // okHttpClient 实例
        OkHttpClient okHttpClient = new OkHttpClient();
        //post方式提交的数据
      	Builder builder = new FormBody.Builder();
        // 放入表单数据
        for(String key: formData.keySet())
        {
          builder.add(key,formData.get(key));
        }
        // 构建 FormBody 对象
        FormBody formBody = builder.build();
        // 指定 post 方式提交FormBody
        Request request = new Request.Builder().url(url).post(formBody).build();
        // 使用client去请求
        Call call = okHttpClient.newCall(request);
        // 返回结果字符串
        String result = null;
        try {
          // 获得返回结果
          result = call.execute().body().string();
        } catch (IOException e) {
          // 抓取异常
          System.out.println("request " + url + " error . ");
          e.printStackTrace();
        }
        return result;
      }
    
      public static void main(String[] args) {
        String url = "";
        Map<String, String> formData = new HashMap();
        formData.put("","" );
    
        FormPoster poster = new FormPoster();
        String content = poster.postContent(url, formData);
    
        System.out.println("API调用结果");
        System.out.println(content);
      }
    
    1. postJSON数据
private static final MediaType JSON_TYPE=MediaType.parse("application/json; charset=utf-8");
  
  public String postContent(String url, Map<String, String> datas) {
    // okHttpClient 实例
    OkHttpClient okHttpClient = new OkHttpClient();
    // 数据对象转换成 json 格式字符串
    String jsonString = JSON.toJSONString(datas);
    //构建RequestBody对象
    RequestBody requestBody = RequestBody.create(JSON_TYPE, jsonString);
    //post方式提交的数据
    Request request = new Request.Builder().url(url).post(requestBody).build();
    // 使用client去请求
    Call call = okHttpClient.newCall(request);
    // 返回结果字符串
    String result = null;
    try {
      // 获得返回结果
      result = call.execute().body().string();
    } catch (IOException e) {
      // 抓取异常
      System.out.println("request " + url + " error . ");
      e.printStackTrace();
    }
    return result;
  }

  public static void main(String[] args) {
    String url ="" ;
    Map<String, String> datas = new HashMap();
    向datas里添加数据
    String content = new JsonPoster().postContent(url,datas);

    System.out.println("API调用结果");
    System.out.println(content);
  }
  • // 用 CookieJar 实现 cookie 的存储,便于登录后请求其它 URL 可以复用
      private static final OkHttpClient okHttpClient = new OkHttpClient.Builder()
          .cookieJar(new CookieJar() {
            private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
    
            @Override
            public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
              cookieStore.put("mtime.com", cookies);
              System.out.println("[saveFromResponse]url.host()=" + url.host());
            }
    
            @Override
            public List<Cookie> loadForRequest(HttpUrl url) {
              System.out.println("[loadForRequest]url.host()=" + url.host());
              List<Cookie> cookies = cookieStore.get("mtime.com");
              return cookies != null ? cookies : new ArrayList<>();
            }
          })
          .build();
    
  • 文档地址:https://ham.youkeda.com/articles/detail/5f3757fd5e205f30b2c2b1f9

  • json格式化工具:http://www.ab173.com/json/jsonviewernew.php

  • Headers三大件:

    1. User-Agent浏览器标识

    2. Referer网页标识

    3. Host域名标识

  • 写入文本文件

    
    // 文件对象
    File file = new File("foo.txt");
    
    // 写入内容
    FileWriter fileWritter = new FileWriter(file);
    fileWritter.write(content);
    
    // 关闭
    fileWritter.close();
    
  • 写入二进制文件

    // 文件对象
    File file = new File("china-city-list.xlsx");
    
    // 写文件
    FileOutputStream fos = new FileOutputStream(file);
    fos.write(data);
    
    // 必须刷新并关闭
    fos.flush();
    fos.close();
    

Comment