1.任务目标
1.把实现http通信的程序(见get/post方式实现http通信)改造为一个可以通过HTTP请求来下载图片或其他二进制文件的程序,下载结果要按下载到的文件类型进行存盘。
2.把本程序改造为一个输入一个起始URL及其参数之后就可以下载此URL及其参数所指定的WEB页面,以及此WEB页面中HTML语言超级链接所指向的所有WEB页面(只下载一级即可)。
2.完成思路与知识点总结
2.1 任务1
思路分析:
该任务要求和http基础通信实现相差不大,只是从获取响应信息改为将获取到的信息下载到本地进行存盘。在前面任务中我已经读取到了服务器网页的页面代码,因此这里我尝试通过http请求来下载网页上的某一个图片。
该任务同样可分为两个部分:
- 一是通过java http通信来建立和某一服务器的连接;
- 另一个是通过使用之前学习的io流来完成数据的读写。
其中,java http通信的建立方法和上面的一样,都是先指定一个url,这里的url是复制图片的链接作为url;参数设置包括请求方式、响应时间、是否允许读取文件和输出文件等;建立实际连接,通过获取服务器返回的响应码来判断是否连接成功。连接成功后,开始下载图片。回顾之前学习的java文件读写,这里的下载过程的关键就是一边读一边写:将图片存放在一个byte数组中,通过调用read方法,通过判断其值是否为-1来确定图片是否读取完毕,如果没有读取完,则需要使用write方法写入指定的路径中,直至读取完毕后刷新并关闭读写流。
2.2 任务2
思路分析:
该任务内容和任务1类似,建立java连接和下载web页面的方法和上面一样,只需将url指定为想要下载的网页的路径,并将本地写入路径的格式从png更改为html即可。
3.代码实现
1、通过HTTP请求来下载图片并将下载结果进行存盘:
import java.net.*;
import java.io.*;
/*
把本程序改造为一个可以通过HTTP请求来下载图片或其他二进制文件的程序,下载结果要按下载到的文件类型进行存盘。
*/
public class http4 {
public static void main(String[] args) {
try{
//url为网页上图片的地址
URL url = new URL("https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png");//指定url,百度logo
//URL url = new URL("https://aecpm.alicdn.com/simba/img/TB1W4nPJFXXXXbSXpXXSutbFXXX.jpg");//指定url,天猫商品图片
HttpURLConnection con = (HttpURLConnection)url.openConnection();//创建httpURLConnection链接对象
con.setRequestMethod("GET");//指定通信方式为get
con.setConnectTimeout</