Mini浏览器(MiniBrowser)

您所在的位置:网站首页 minibrowser是什么浏览器 Mini浏览器(MiniBrowser)

Mini浏览器(MiniBrowser)

2023-09-18 03:51| 来源: 网络整理| 查看: 265

import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.InetSocketAddress; import java.net.Socket; import java.net.URL; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MiniBrowser { public static void main(String[] args) throws Exception { String url = "xxxxxxxxxxxx"; String contentString = getContentString( url ,false); System.out.println(contentString); String httpString = getHttpString(url, false); System.out.println(httpString); } public static byte[] getContentBytes(String url){ return getContentBytes(url,false); } public static String getContentString(String url){ return getContentString(url ,false); } private static String getContentString(String url, boolean gzip) { byte[] result = getContentBytes(url,gzip); if(null==result) return null; try{ return new String(result,"utf-8").trim();//去掉字符串两旁空白字符与预定义字符 } catch (UnsupportedEncodingException e) { return null; } } private static byte[] getContentBytes(String url, boolean gzip) { byte[] response = getHttpBytes(url, gzip); byte[] doubleReturn = "\r\n\r\n".getBytes();//双回车相当于分割线 int pos = -1; for (int i = 0 ; i pos = i ; break; } } if(-1==pos) return null; pos +=doubleReturn.length; byte[] result = Arrays.copyOfRange(response,pos,response.length); return result; } private static String getHttpString(String url) { return getHttpString(url,false); } private static String getHttpString(String url, boolean gzip) { byte[] bytes = getHttpBytes(url, gzip); return new String(bytes).trim(); } private static byte[] getHttpBytes(String url, boolean gzip) { byte[] result = null; try { URL u = new URL(url); Socket client = new Socket() ; int port = u.getPort();//提取端口号 if (-1==port) port = 80; InetSocketAddress inetSocketAddress = new InetSocketAddress(u.getHost(),port);//使用getHost创建对象 client.connect(inetSocketAddress,1000);//超时 Map requestHeader = new HashMap(); requestHeader.put("Host", u.getHost()+":"+port); requestHeader.put("Accept","text/html"); requestHeader.put("Connection","close"); requestHeader.put("User-Agent","how2j mini brower / java1.8"); if (gzip) requestHeader.put("Accept-Encoding","gzip"); String path = u.getPath(); if(path.length()==0) path = "/"; String firstLine = "GET " + path + " HTTP/1.1\r\n"; StringBuffer httpRequestString = new StringBuffer(); httpRequestString.append(firstLine); Set headers = requestHeader.keySet(); for (String header : headers) { String headerLine = header + ":" + requestHeader.get(header)+"\r\n"; httpRequestString.append(headerLine); } PrintWriter pWriter = new PrintWriter(client.getOutputStream(), true); pWriter.println(httpRequestString); InputStream is = client.getInputStream(); int buffer_size = 1024; ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte buffer[] = new byte[buffer_size]; while(true) { int length = is.read(buffer); if(-1==length) break; baos.write(buffer, 0, length); if(length!=buffer_size) break; } result = baos.toByteArray(); client.close(); }catch (Exception e){ e.printStackTrace(); try { result = e.toString().getBytes("utf-8"); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } } return result; } }

该demo主要提供:1 . getHttpBytes 返回二进制http 响应 ; 2 . getHttpString 返回字符串的http响应 ; 3. getContentBytes 返回二进制的响应内容 ; 4. getContentString 返回字符串的响应内容 ; 5. gzip参数 方便获取压缩后的数据 。

最核心的是 getHttpBytes ----》通过socket 发送http协议给服务器 。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3