导图社区 java新网络编程-1
这是一篇关于jva新网络编程的思维导图,主要内容有1、HTTP协议原理2、简单的APl调用3、POST表单数据4、Response等。
编辑于2022-08-29 23:53:16 江苏省jva新网络编程
1、HTTP协议原理
协议
URL(也就是常说的网址)
子主题
2、简单的API调用
抓取网址内容
先安装一个依赖库
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.1.0</version> </dependency>
使用Okhttp3完成页面请求三大步骤
1:实例化OkHttpClient
2:执行调用
i.调用之前实例化一个Request对象
ii.然后构建调用对象
iii.执行调用,可能抛出异常
3:call.execute()执行调用代码,返回的是一个执行的结果对象,调用对象的方法即可获取返回值内容。call.execute().body.string();
/** * 根据输入的url,读取页面内容并返回 */ public String getContent(String url) { // okHttpClient 实例 OkHttpClient okHttpClient = new OkHttpClient(); // 定义一个request Request 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; }
3、POST表单数据
https://codeserver.youkeda.com/aspiring/j14-2-3-10/-/blob/master/src/main/java/com/youkeda/test/http/FormPoster.java(具体实践)
JSON数据
https://codeserver.youkeda.com/aspiring/j14-2-4-10/-/blob/master/src/main/java/com/youkeda/test/http/JsonPoster.java(自己体会)
4、Response
1:获取状态码
call.execute.code(); 返回Int型
优化:既可以获取状态码,还可以获取内容
import okhttp3.Response; // 执行请求 Response rep = call.execute(); // 获取响应状态码 int code = rep.code(); // 获取响应内容 String content = rep.body().string();
2:非文本文件
Okhttp3库既可以请求网页,API,还可以请求图片、Excel。图片区别在于图片不是可以直接阅读的字符文本,而是二进制编码,请求这种非字符文件时候,用response.body().bytes();
范例:https://codeserver.youkeda.com/aspiring/j14-3-2-11/-/blob/master/src/main/java/com/youkeda/test/http/ExcelAsker.java
3:很多API返回的是JSON 格式的,所以可以通过fastjson库,把JSON结果转换为对象。JSON.parseObject()
这是JSON结果转换成Map对象范例:https://codeserver.youkeda.com/aspiring/j14-3-3-10/-/blob/master/src/main/java/com/youkeda/test/http/ApiAsker.java
解析JSON对象
依赖:<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>
JSON格式化工具(看的比较清晰点)
http://www.ab173.com/json/jsonviewernew.php
主题
8、如何在java用自己邮箱发邮件
1:添加依赖、<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency>
2,在自己QQ邮箱里面开通IMPA/STMP服务获取授权码
固定写法:import java.security.Security; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailClient { public static void main(String[] args) { try { final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; //配置邮箱信息 Properties props = System.getProperties(); //邮件服务器 props.setProperty("mail.smtp.host", "smtp.qq.com"); props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); props.setProperty("mail.smtp.socketFactory.fallback", "false"); //邮件服务器端口 props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); //鉴权信息 props.setProperty("mail.smtp.auth", "true"); //建立邮件会话 Session session = Session.getDefaultInstance(props, new Authenticator() { //身份认证 protected PasswordAuthentication getPasswordAuthentication() { //1.账户 授权码 return new PasswordAuthentication("xxxxxxx@qq.com", "xxxx"); } }); //建立邮件对象 MimeMessage message = new MimeMessage(session); //设置邮件的发件人 message.setFrom(new InternetAddress("xxxxxxx@qq.com")); //2.设置邮件的收件人 message.setRecipients(Message.RecipientType.TO, "xxxxxxx@qq.com"); //设置邮件的主题 message.setSubject("通过javamail发出!!!"); //文本部分 message.setContent("文本邮件测试", "text/html;charset=UTF-8"); message.saveChanges(); //发送邮件 Transport.send(message); } catch (Exception e) { e.printStackTrace(); } } }
范例:https://codeserver.youkeda.com/aspiring/j14-7-2-2/-/blob/master/src/main/java/com/youkeda/email/Mail.java
7、Cookie&Session
Cookie
子主题
Session
使用方法:在登录时候抓取登录信息,右键检查,在网络那里,勾选保留日志,然后登录就能看见login,然后进去看。
// 用 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://codeserver.youkeda.com/aspiring/j14-6-2-10/-/blob/master/src/main/java/com/youkeda/test/http/PageLoginer.java
6、下载文件、图片
写文件三步骤
创建文件对象 ↓ 写入内容 ↓ 关闭写入操作
写入文本文件
import java.io.File; import java.io.FileWriter; // 文件对象 File file = new File("foo.txt"); // 写入内容 FileWriter fileWritter = new FileWriter(file.getName()); fileWritter.write(content); // 关闭 fileWritter.close();
写入二进制文件
import java.io.File; import java.io.FileOutputStream; // 文件对象 File file = new File("china-city-list.xlsx");(这是excel表) // 写文件 FileOutputStream fos = new FileOutputStream(file); fos.write(data); // 必须刷新并关闭 fos.flush(); fos.close();
解析excel(一般来说要office才能读取,但是JAVA强大)
依赖库:<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency>
子主题
子主题
子主题
5、headers(消息头)
User-Agent
写法:Request request = new Request.Builder() .url(url) .header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1") // 添加一个 header 信息 .build(); // 返回结果字符串
Referer
写法:Request request = new Request.Builder() .url(url) .addHeader("Referer", "https://ham.youkeda.com/course/j14/0") .build();
Host