新Java网络编程

  • Get请求
  • Post表单数据/JSON数据
  • 获取响应码/请求非文本内容
  • 解析JSON数据
  • headers(User-Agent、Referer、Host)
  • 下载图片文件/解析excel
  • cookie&session

Get请求

安装依赖库

<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.1.0</version>
</dependency>

代码如下

package com.youkeda.http.two;import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;import java.io.IOException;public class getPage {public static String getContent(String url){//okHttpClient实例OkHttpClient okHttpClient=new OkHttpClient();//定义一个requestRequest request=new Request.Builder().url(url).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="http://www.weather.com.cn/data/sk/101210106.html";String content=getContent(url);System.out.println(content);}
}

Post表单数据/JSON数据

  • 提交表达数据
package com.youkeda.http.two;import okhttp3.Call;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class FormPoster {public static String postComment(String url, Map<String,String> formData){OkHttpClient okHttpClient=new OkHttpClient();FormBody.Builder builder=new FormBody.Builder();for (String key : formData.keySet()) {builder.add(key,formData.get(key));}FormBody formBody= builder.build();Request request=new Request.Builder().url(url).post(formBody).build();Call call= okHttpClient.newCall(request);String result=null;try {result=call.execute().body().string();} catch (IOException e) {System.out.println("request "+result+" error.");e.printStackTrace();}return result;}public static void main(String[] args) {String url="http://tcc.taobao.com/cc/json/mobile_tel_segment.html";Map<String,String> formData=new HashMap<>();formData.put("tel","18952333672");String content=postComment(url,formData);System.out.println(content);}
}
  • 提交JSON数据
<!-- 在下列地址查询最新的版本:https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.62</version>
</dependency>
package com.youkeda.http.two;import com.alibaba.fastjson.JSON;
import okhttp3.*;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class FormPoster2 {public static final MediaType JSON_TYPE=MediaType.parse("application/json;charset=utf-8");public static String postContent(String url, Map<String,String> data){OkHttpClient okHttpClient=new OkHttpClient();String param= JSON.toJSONString(data);RequestBody requestBody=RequestBody.create(JSON_TYPE,param);Request request=new Request.Builder().url(url).post(requestBody).build();Call call= okHttpClient.newCall(request);String result=null;try {result=call.execute().body().string();} catch (IOException e) {System.out.println("request "+result+" error.");e.printStackTrace();}return result;}public static void main(String[] args) {String url="https://www.fastmock.site/mock/3d95acf3f26358ef032d8a23bfdead99/api/posts";Map<String,String> data=new HashMap<>();data.put("num","20190101");data.put("name","王陆");data.put("gender","男");data.put("faculty","灵剑派");data.put("discipline","无相剑骨");data.put("class","一年一班");data.put("startYear","2019");String content=postContent(url,data);System.out.println(content);}
}

获取响应码/请求非文本内容

  • 获取状态码
package com.youkeda.http.three;import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;import java.io.IOException;public class GetPage {public static String getContent(String url){OkHttpClient okHttpClient=new OkHttpClient();Request request=new Request.Builder().url(url).build();Call call= okHttpClient.newCall(request);Response response=null;String result=null;int code=0;try {response = call.execute();result=response.body().string();code=response.code();System.out.println("状态吗:"+code);} catch (IOException e) {System.out.println("request "+url+ " error.");e.printStackTrace();}return result;}public static void main(String[] args) {String url="https://www.baidu.com/";String content=getContent(url);System.out.println(content);}
}
  • 获取图片及Excel大小
package com.youkeda.http.three;import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;import java.io.IOException;public class ImageAsker {public static void getImage(String url){OkHttpClient okHttpClient=new OkHttpClient();Request request=new Request.Builder().url(url).build();Call call= okHttpClient.newCall(request);try {Response response= call.execute();byte[] bytes=response.body().bytes();System.out.println("图片的大小为:"+bytes.length+" 字节");} catch (IOException e) {System.out.println("request "+url+" error.");e.printStackTrace();}}public static void main(String[] args) {String url="https://style.youkeda.com/img/ham/course/py2/douban2.png";getImage(url);}
}

解析JSON数据

Map转化为JSON数据

String param= JSON.toJSONString(data);

JSON数据转化为Map

Map objectMap= JSON.parseObject(content,Map.class);

要会多级解析JSON数据

package com.youkeda.http.three;import com.alibaba.fastjson.JSON;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;import java.io.IOException;
import java.util.List;
import java.util.Map;public class ApiAsker3 {public static 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) {String url="https://c.y.qq.com/soso/fcgi-bin/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=30&w=西海情歌&format=json";String content=getContent(url);System.out.println(content);Map objectMap= JSON.parseObject(content,Map.class);Map data=(Map) objectMap.get("data");Map song=(Map) data.get("song");List list=(List) song.get("list");Map one=(Map) list.get(0);System.out.println(one.get("albumname"));}
}

headers(User-Agent、Referer、Host)

  • User-Agent
    在指定url发送请求的时候,告诉服务端,用户的浏览器类型、版本等数据,就认为这是一个浏览器请求的环境,就会给出响应
  • Referer
    如果像图片等只允许在本站内可访问的话,可以加Referer,模拟浏览器自动加Referer,设置原图片使用的网址
  • Host
    设置当前请求的域名,虽然url中有域名,但如果用了代理服务器或不写域名,而用ip地址进行访问的话,设置域名就非常有效了
package com.youkeda.http.four;import com.alibaba.fastjson.JSON;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;import java.io.IOException;
import java.util.List;
import java.util.Map;public class ApiAsker3 {public static String getContent(String url){OkHttpClient okHttpClient=new OkHttpClient();Request request=new Request.Builder().url(url).addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1").addHeader("Referer","https://www.fastmock.site").addHeader("Host","www.fastmock.site").build();Call call=okHttpClient.newCall(request);String result=null;try {Response response= call.execute();result=response.body().string();int code= response.code();String url2=response.request().url().toString();System.out.println(code);System.out.println(url2);} catch (IOException e) {System.out.println("request "+url+" error.");e.printStackTrace();}return result;}public static void main(String[] args) {String url="https://www.fastmock.site/mock/3d95acf3f26358ef032d8a23bfdead99/api/info/suggestion?from=web&format=json&word=刺心&third_type=0&client_type=0&version=2";//        getContent(url);String content=getContent(url);System.out.println(content);Map resultMap=(Map) JSON.parseObject(content,Map.class);Map data=(Map) resultMap.get("data");List list=(List) data.get("song");for (int i = 0; i < list.size(); i++) {Map map=(Map) list.get(i);System.out.println(map.get("songname"));}}
}

下载图片文件/解析excel

  • 写入文本文件
package com.youkeda.http.five;import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;public class ApiAsker {public static 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 {Response response=call.execute();result=response.body().string();} catch (IOException e) {System.out.println("request "+url+" error.");e.printStackTrace();}return result;}public static void main(String[] args) {String url="https://style.youkeda.com/img/ham/course/py2/h.txt";String content=getContent(url);System.out.println(content);File file=new File("h.txt");try {FileWriter fileWriter=new FileWriter(file.getName());fileWriter.write(content);fileWriter.close();} catch (IOException e) {e.printStackTrace();}}
}
  • 写入二进制文件
package com.youkeda.http.five;import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class ExcelAsker {public static 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 {Response response= call.execute();result=response.body().bytes();} catch (IOException e) {System.out.println("request "+url+" error.");e.printStackTrace();}return result;}public static void main(String[] args) {String url="https://style.youkeda.com/img/ham/course/py2/xzq_201907.xlsx";byte[] content=getContent(url);File file=new File("xzq_201907.xlsx");try {FileOutputStream fos=new FileOutputStream(file);fos.write(content);fos.flush();fos.close();} catch (IOException e) {e.printStackTrace();}System.out.println("下载成功");}
}
  • 下载图片
package com.youkeda.http.five;import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class ImageAsker {public static byte[] getContent(String url){OkHttpClient okHttpClient=new OkHttpClient();Request request=new Request.Builder().url(url).addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1").addHeader("Referer","http://photo.yupoo.com").addHeader("Host","photo.yupoo.com").build();Call call= okHttpClient.newCall(request);byte[] result=null;try {Response response= call.execute();result=response.body().bytes();} catch (IOException e) {e.printStackTrace();}return result;}public static void main(String[] args) {String url="http://photo.yupoo.com/vibius/GkRSowXr/medish.jpg";byte[] content=getContent(url);File file=new File("image.jpg");try {FileOutputStream fileOutputStream=new FileOutputStream(file);fileOutputStream.write(content);fileOutputStream.flush();fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}System.out.println("Download complete");}}
  • 解析excel
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.6</version>
</dependency>
package com.youkeda.http.five;import com.alibaba.excel.EasyExcel;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;public class ExcelAsker2 {public static 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 {Response response= call.execute();result=response.body().bytes();} catch (IOException e) {System.out.println("request "+url+" error.");e.printStackTrace();}return result;}public static void main(String[] args) {String url="https://style.youkeda.com/img/ham/course/py2/china-city-list.xlsx";byte[] content=getContent(url);File file=new File("china-city-list.xlsx");try {FileOutputStream fos=new FileOutputStream(file);fos.write(content);fos.flush();fos.close();} catch (IOException e) {e.printStackTrace();}System.out.println("下载成功");List<Map<Integer,String>> sheetDatas= EasyExcel.read("china-city-list.xlsx").sheet(0).doReadSync();for (Map<Integer, String> rowData : sheetDatas) {for (Integer index : rowData.keySet()) {String columnValue=rowData.get(index);System.out.print(columnValue+" ");}System.out.println();}}
}

cookie&session

  • cookie


从浏览器中找到登录后的cookie,把cookie用工具写成Map格式,如图所示写上去
详情见优课达P2 新Java网络编程6.1cookie

  • session
package com.youkeda.http.six;import okhttp3.*;
import org.jetbrains.annotations.NotNull;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class PageLoginer {private static final OkHttpClient okHttpClient=new OkHttpClient.Builder().cookieJar(new CookieJar() {private final HashMap<String,List<Cookie>> cookieStare = new HashMap<>();@Overridepublic void saveFromResponse(@NotNull HttpUrl url, @NotNull List<Cookie> cookies) {cookieStare.put("mtime.com",cookies);}@NotNull@Overridepublic List<Cookie> loadForRequest(@NotNull HttpUrl httpUrl) {List<Cookie> cookies=cookieStare.get("mtime.com");return cookies!=null ? cookies: new ArrayList<>();}}).build();public String postContent(String url, Map<String,String> formData){FormBody.Builder builder=new FormBody.Builder();for (String key : formData.keySet()) {builder.add(key,formData.get(key));}FormBody formBody= builder.build();Request request=new Request.Builder().url(url).post(formBody).addHeader("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62").addHeader("Referer","https://passport.mtime.com/").addHeader("Host","front-gateway.mtime.com").build();Call call= okHttpClient.newCall(request);String content=null;try {Response response= call.execute();content=response.body().string();} catch (IOException e) {e.printStackTrace();}return content;}public static void main(String[] args) {String url="https://front-gateway.mtime.com/user/user/login.api";Map<String,String> formData=new HashMap<>();formData.put("name","18952333672");formData.put("password","3a40af7a8174eb7e303102a399d5d1ac");String content=new PageLoginer().postContent(url,formData);System.out.println(content);}
}
  • 复用session

先post后get

package com.youkeda.http.six;import okhttp3.*;
import org.jetbrains.annotations.NotNull;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class PageLoginer2 {//用CookieJar实现cookie的存储,便于登录后请求其他URL可以调用private static final OkHttpClient okHttpClient=new OkHttpClient.Builder().cookieJar(new CookieJar() {private final HashMap<String,List<Cookie>> cookieStore=new HashMap<>();@Overridepublic void saveFromResponse(@NotNull HttpUrl url, @NotNull List<Cookie> cookies) {cookieStore.put("mtime.com",cookies);}@NotNull@Overridepublic List<Cookie> loadForRequest(@NotNull HttpUrl url) {List<Cookie> cookies=cookieStore.get("mtime.com");return cookies!=null?cookies:new ArrayList<>();}}).build();public String postContent(String url, Map<String,String> formData){FormBody.Builder builder=new FormBody.Builder();for (String key : formData.keySet()) {builder.add(key, formData.get(key));}FormBody formBody= builder.build();Request request=new Request.Builder().url(url).post(formBody).addHeader("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62").addHeader("Referer","https://www.mtime.com/").addHeader("Host","front-gateway.mtime.com").build();return doExcute(request);}public String getContent(String url){Request request=new Request.Builder().url(url).addHeader("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.62").addHeader("Referer","http://my.mtime.com/").addHeader("Host","front-gateway.mtime.com").build();return doExcute(request);}public String doExcute(Request request){Call call= okHttpClient.newCall(request);String result=null;try {Response response= call.execute();result=response.body().string();} catch (IOException e) {e.printStackTrace();}return result;}public static void main(String[] args) {PageLoginer2 pageLoginer2=new PageLoginer2();String url="https://front-gateway.mtime.com/user/user/login.api";Map<String,String> resultMap=new HashMap<>();resultMap.put("name","18952333672");resultMap.put("password","3a40af7a8174eb7e303102a399d5d1ac");String content= pageLoginer2.postContent(url,resultMap);System.out.println(content);String url2="http://my.mtime.com/personal/personInfo";String content2= pageLoginer2.getContent(url2);System.out.println(content2);}
}

最终代码!!!

OkHttp3网络编程代码总结相关推荐

  1. 网络编程代码实例:多进程版

    文章目录 前言 代码仓库 内容 代码(有详细注释) server.c client.c Makefile 结果 总结 参考资料 作者的话 前言 网络编程代码实例:多进程版. 代码仓库 yezhenin ...

  2. 网络编程—代码—TCP网络传输

    一.TCP:用字符流传输信息 ------------------------------------------------------------------------------ [用字符流的 ...

  3. Linux网络编程中的几组类似功能的区别

    1.bzero与memset char buff[1024]; memset(buff,0,sizeof(buff));bzero(buff, sizeof(buff)); struct sockad ...

  4. JAVA——网络编程

    文章目录 1.InetAddress类的使用 1.1 实现网络通信需要解决的问题 1.2 网络通信的两个要素 1.3通信要素一:IP和端口号 1.3.1 IP的理解 1.3.2 InetAddress ...

  5. IO流,多线程,网络编程(4)JavaSE

    1 IO流 Java如何操作电脑上的文件和文件夹?通过File类对它们进行操作 因为Java是面向对象的,所以最擅长的就是操作对象,将盘符上的文件/目录的各种信息进行了封装,封装为一个对象,我们程序就 ...

  6. 套接字编程-TCP网络编程

    文章目录 套接字地址结构 通用套接字地址数据结构 以太网协议的套接字地址数据结构 Netlink协议套接字地址结构 TCP网络编程 套接字初始化socket() domain type protoco ...

  7. 【专栏必读】王道考研408计算机网络+湖科大教书匠计算机网络+网络编程万字笔记、题目题型总结、注意事项、目录导航和思维导图

    王道考研复习指导下载(密码7281) 其他科目导航 [专栏必读]王道考研408计算机组成原理万字笔记(从学生角度辅助大家理解):各章节导航及思维导图 [专栏必读]王道考研408操作系统万字笔记.题目题 ...

  8. TCP/IP网络编程 学习笔记_1 --网络编程入门

    前言:这个系列网络编程教程实例代码是在Xcode上运行的,MacOSX,是一个基于UNIX核心的系统,所以基于Linux的网络编程代码一般可以直接在Xcode上运行,如果要移植到Windows其实就只 ...

  9. 网络编程(三):Linux 网络IO模型、select、pool、epoll 内核设计

    Linux网络IO模型 同步和异步,阻塞和非阻塞 同步和异步 关注的是调用方是否主动获取结果 同步: 同步的意思就是调用方需要主动等待结果的返回 异步: 异步的意思就是不需要主动等待结果的返回,而是通 ...

最新文章

  1. javascript实例
  2. 计算机如何改变沟通方式,雅思阅读模拟题:计算机改变沟通方式
  3. udp需要arp请求吗_当你随便浏览一个网页时,你知道背后做了多少工作吗?
  4. python相关背景及语言特点
  5. 格子箱被评选为12家最值得注意的亚洲初创科技公司之一
  6. 不记得 Git 命令? 懒人版 Git 值得拥有!
  7. PostgreSQL数据库配置网络访问
  8. SQL server 查询语句
  9. Ruby命令之gem操作
  10. CentOS下安装Docker-CE
  11. unity通过服务器地址下载文件
  12. 使用小丸工具箱进行极限视频压缩
  13. 超棒工具8个高质量图标搜索引擎
  14. 对Volterra级数公式的理解-1
  15. 数据库SQLite之嵌入式Linux实际网关项目使用初步
  16. B. Ternary Sequence
  17. KNIME + Python = 数据分析+报表全流程
  18. 宗镜录略讲——南怀瑾老师——系列6
  19. python数据分析用什么软件好_居民出行OD调查后数据分析应该用什么软件做?
  20. 相遇不易,5个高评分电脑软件,每一个都值得你安装

热门文章

  1. 脑科学与脑机接口原理
  2. Hive 自定义函数UDF入门
  3. mysql数据库拒绝连接
  4. 二级联动之两种方法实现
  5. ULTRA社区月度更新报告#3
  6. mysql 部门工资_哪些员工的工资大于所在部门的平均工资?用mysql查询语句
  7. iOS flashScrollIndicators让滚动条多呆一会
  8. 使用FAXCOMEXLib与Windows XP计算机在.Net 2005 2.0版中发送传真
  9. 学习fvcom生物模块遇到的问题之一
  10. URL短链地址生成器Pckd