HTTP协议是基于TCP协议的,TCP协议在Java中的体现就是套接字.在了解HTTP协议的基础上,完全可以通过TCP来实现一套HTTP库,这个库可以发起网络请求和接受网络请求.只要能用URLConnection能实现的事情,用Socket同样能够实现.

代理是"代理服务器",我不直接向百度发起请求,而是向代理服务器发起请求,然后代理服务器代替我向百度发起请求.这样一来,我的IP地址就不会暴露.在编写爬虫时,同一个IP爬多了就会被要求输入验证码,这时就可以通过代理来不停地换IP从而规避验证码.

本文提供四种方法,第一种方法通过设置环境变量,第二种方法通过URLConnection,第三种方法通过nio中的SocketChannel,第四种方法通过Socket.

public class TestProxy {
    static String host = "112.126.65.26";
    static int port = 12345;
    static String url = "http://1212.ip138.com/ic.asp";
    public static void main(String[] args) throws Exception {
        four();
    }
    static void one() throws MalformedURLException, IOException {
        // 没有这句话是不行的
        System.setProperty("http.proxySet", "true");
        System.setProperty("http.proxyHost", host);
        System.setProperty("http.proxyPort", port + "");
        URLConnection connection = new URL(url).openConnection();
        show(connection.getInputStream());
    }
    static void two() throws MalformedURLException, IOException {
        SocketAddress addr = new InetSocketAddress(host, port);
        Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
        // 下面这个网址会告诉你你的ip地址
        URLConnection connection = new URL(url).openConnection(proxy);
        show(connection.getInputStream());
    }
    // 使用socket也是一样
    static void three() throws IOException {
        SocketChannel sc = SocketChannel
                .open(new InetSocketAddress(host, port));
        sc.write(Charset.forName("utf8")
                .encode("GET " + url + " HTTP/1.1\r\n\r\n"));
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        while (sc.read(buffer) != -1) {
            buffer.flip();
            System.out.println(Charset.forName("utf8").decode(buffer));
            buffer.clear();
        }
        sc.close();
    }
    static void four() throws IOException {
        // 以下地址是代理服务器的地址
        Socket socket = new Socket(host, port);
        // 写与的内容就是遵循HTTP请求协议格式的内容,请求百度
        socket.getOutputStream().write(
                new String("GET " + url + " HTTP/1.1\r\n\r\n").getBytes());
        show(socket.getInputStream());
        socket.close();
    }
    static void show(InputStream in) throws IOException {
        Scanner cin = new Scanner(in);
        StringBuilder builder = new StringBuilder();
        while (cin.hasNext()) {
            builder.append(cin.nextLine());
        }
        cin.close();
        Pattern pattern = Pattern
                .compile("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
        Matcher matcher = pattern.matcher(builder.toString());
        matcher.find();
        System.out.println(matcher.group());
    }
}

Java使用代理服务器的更多相关文章

  1. Java实现代理服务器

    Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演"中间人"的角色. HTTP的代理服务器即是Web服务器又是Web客户端. 代理服务器 ...

  2. 用Java开发代理服务器

    基础知识 不管以哪种方式应用代理服务器,其监控HTTP传输的过程总是如下: 步骤一:内部的浏览器发送请求给代理服务器.请求的第一行包含了目标URL. 步骤二:代理服务器读取该URL,并把请求转发给合适 ...

  3. Java实现sock5代理服务器

    入职练手socks5代理服务器,过程总结一下. 1.下载火狐浏览器,设定代理为socks5代理,地址为127.0.0.1:1080. 2.socks5协议1928,中文版,原版,认真阅读 3.按照协议 ...

  4. HTTP Proxy Servlet 代理服务使用

    java servlet  代理服务器 1. 使用 maven  依赖 <dependency> <groupId>org.mitre.dsmiley.httpproxy< ...

  5. tit.Atitit. http 代理原理  atiHttpProxy  大木马 h

    Atitit. http 代理原理  atiHttpProxy  大木马 1. 面这张图可以清晰地阐明HttpProxy的实现原理:1 2. 代理服务器用途1 3. 其中流程具体如下:2 4. 设计规 ...

  6. Atitit. http 代理原理  atiHttpProxy  大木马

    Atitit. http 代理原理  atiHttpProxy  大木马 1. 面这张图可以清晰地阐明HttpProxy的实现原理:1 2. 代理服务器用途1 3. 其中流程具体如下:2 4. 设计规 ...

  7. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  8. 基于jsoup的Java服务端http(s)代理程序-代理服务器Demo

    亲爱的开发者朋友们,知道百度网址翻译么?他们为何能够翻译源网页呢,iframe可是不能跨域操作的哦,那么可以用代理实现.直接上代码: 本Demo基于MVC写的,灰常简单,copy过去,简单改改就可以用 ...

  9. 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序

     1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 ...

随机推荐

  1. Azure IoT带来更高效的新能源生产和会看人脸色的无人超市

    全球分析机构都认为物联网将在未来几年呈现爆发式增长,到2020年,各种传感器.新型物联网设备,再加上传统PC.智能手机.平板电脑.网络电视,以及各类可穿戴智能设备,将交织成一个由300亿到500亿台设 ...

  2. app:clean classes Exception

    Error:Execution failed for task ':app:clean'.> Unable to delete directory: C:\Users\LiuZhen\Deskt ...

  3. ORACLE 10g 数据库体系结构图

    ORACLE 10g 的数据库体系结构图(ORACLE 10g(Release 2)ARCHITECTURE),非常的全面.系统.高屋建瓴的整体介绍了ORACLE 10g 的数据库体系结构.如果能全面 ...

  4. SQL SERVER 临时表的排序问题

    在SQL SERVER 2005/2008中,如果将有序的记录插入临时表,则从临时表查询出来的记录是有序的(不依赖ORDER BY也是有序状态),但是从SQL SERVER 2012开始,即使插入的记 ...

  5. Hive 分组问题

    group by 中出现的字段不能再select 后面单独显示,必须配合函数使用 上面中的 ' group by id 总结: Hive不允许直接访问非group by字段: 对于非group by字 ...

  6. W3School-CSS 轮廓(Outline)实例

    CSS 轮廓(Outline)实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CSS 内 ...

  7. 个人Github-欢迎交流探讨

    Github annsshadow

  8. windows socket编程select模型使用

    int select(         int nfds,            //忽略         fd_ser* readfds,    //指向一个套接字集合,用来检测其可读性       ...

  9. JQuery记住用户名和密码的具体实现

    代码如下: //初始化页面时验证是否记住了密码 $(document).ready(function() { if ($.cookie("rmbUser") == "tr ...

  10. Sqlserver游标复习

    经常写存储过程,但今天在游标使用过程中还是疏忽了一些事情,执行过程中一直执行不下去,后来直接sqlserver挂了,教训啊! 代码虽简单,望铭记: Create PROCEDURE [dbo].[te ...