Java基础--网络编程1

Java基础--网络编程1

package test.net;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;


public class InetAddressTest {

	/**
	 * 去掉url中的路径,留下请求参数部分
	 * url地址
	 * @return url请求参数部分
	 */
	private static String TruncateUrlPage(String strURL) {
		String strAllParam = null;
		String[] arrSplit = null;

		strURL = strURL.trim().toLowerCase();

		arrSplit = strURL.split("[?]");
		if (strURL.length() > 1) {
			if (arrSplit.length > 1) {
				if (arrSplit[1] != null) {
					strAllParam = arrSplit[1];
				}
			}
		}

		return strAllParam;
	}

	/**
	 * 解析出url参数中的键值对 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中
	 * url地址
	 * @return url请求参数部分
	 */
	public static Map<String, String> URLRequest(String URL) {
		Map<String, String> mapRequest = new HashMap<String, String>();

		String[] arrSplit = null;

		String strUrlParam = TruncateUrlPage(URL);
		if (strUrlParam == null) {
			return mapRequest;
		}
		// 每个键值为一组 www.2cto.com
		arrSplit = strUrlParam.split("[&]");
		for (String strSplit : arrSplit) {
			String[] arrSplitEqual = null;
			arrSplitEqual = strSplit.split("[=]");

			// 解析出键值
			if (arrSplitEqual.length > 1) {
				// 正确解析
				mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]);

			} else {
				if (arrSplitEqual[0] != "") {
					// 只有参数没有值,不加入
					mapRequest.put(arrSplitEqual[0], "");
				}
			}
		}
		return mapRequest;
	}

	public static void main(String[] args) {

		String link = "https://alimarket.taobao.com/markets/alimama/amp?wh_cat=nvxie&wh_shop=%E6%B1%9F%E5%8D%97%E5%85%88%E7%94%9F%E6%97%97%E8%88%B0%E5%BA%97&qq-pf-to=pcqq.c2c&ali_trackid=17_c133ff6ee06f0efc1ed767fa37c462cf&spm=a21bo.50862.201862-3.1.LJf6WQ";
		try {
			URL url = new URL(link);
			// System.out.println(url.getFile());
			// System.out.println("获取URL的主机名:"+url.getHost());
			// System.out.println("获取URL的路径部分:"+url.getPath());
			// System.out.println("获取URL的端口号:"+url.getPort());//-1代表的默认端口:80
			// System.out.println("获取URL的协议名称:"+url.getProtocol());
			System.out.println("获取URL的查询字符串部分:" + url.getQuery());

			Map<String, String> parmas = URLRequest(link);
			System.out.println(parmas.get("wh_cat"));
			System.out.println(URLDecoder.decode(parmas.get("wh_shop"), "UTF-8"));
			
			System.out.println("================获取网页的源代码=======================");
			//打开网络服务的连接对象
			URL url1 = new URL("https://2.taobao.com/?spm=2007.1000337.0.0.Y97YgW");
			URLConnection conn = url1.openConnection();
//			System.out.println("getContent===="+conn.getContent());
//			System.out.println("getContentEncoding===="+conn.getContentEncoding());
//			System.out.println("getContentLength===="+conn.getContentLength());//网络文件的总大小
//			System.out.println("getExpiration===="+conn.getExpiration());
//			System.out.println("getLastModified===="+conn.getLastModified());
			try {
				//获取连接的字节输入流
				InputStream inputStream = conn.getInputStream();
				//网络图片、视频---字节流(8--1byte)
				//网络源代码---字符流(16--1byte)
				//将字节流转换成字符流--网页的源代码
				InputStreamReader isr = new InputStreamReader(inputStream,"GBK");
				BufferedReader reader = new BufferedReader(isr);
				
				String content = null;
				while ((content=reader.readLine())!=null) {
//					System.out.println(content);
				}
			} catch (Exception e) {
				// TODO: handle exception
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("================下载网络文件======================");
		try {
			URL url2 = new URL("https://img-blog.csdn.net/20161030170411316?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center");
			HttpURLConnection connection = (HttpURLConnection) url2.openConnection();
			
			File file = new File("D:/Eclipse/test");
			if (!file.exists()) {
				file.mkdirs();
			}
			File filename = new File(file,UUID.randomUUID().toString()+".jpg");	
			
			try {
				InputStream inputStream = connection.getInputStream();
				FileOutputStream outputStream = new FileOutputStream(filename);
				byte[] b = new byte[2048];
				int len = 0;
				while((len=inputStream.read(b))!=-1){
					outputStream.write(b, 0, len);
				}
			} catch (Exception e) {
				// TODO: handle exception
			}
			
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值