java_网路爬虫_2

news/2024/7/19 10:18:30 标签: java, 爬虫, 开发语言

连接池

java">package cn.lala.crawler.httpclient.test;

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

import java.io.IOException;


@SuppressWarnings("all")
public class HttpClientPoolManagerTest {
    public static void main(String[] args) throws IOException {
        //创建连接池管理器
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();

        //设置最大连接数
        connectionManager.setMaxTotal(200);
        //设置每个主机的最大连接数,指定访问每一个网站的连接数,不会影响其他网站的访问
        connectionManager.setDefaultMaxPerRoute(20);
        //使用连接池管理器获取连接并发起请求
        get(connectionManager);
        get(connectionManager);//
    }

    private static void get(PoolingHttpClientConnectionManager connectionManager) throws IOException {
        //使用连接池管理器获取连接
        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).build();
        //打印连接,如果两次打印的内存的地址值不一样,证明是不同的连接
        //org.apache.http.impl.client.InternalHttpClient@5af3afd9
        //org.apache.http.impl.client.InternalHttpClient@33f676f6
        System.out.println(httpClient);//
        HttpGet httpGet = new HttpGet("https://www.baidu.com");
        CloseableHttpResponse response = httpClient.execute(httpGet);
        if(response.getStatusLine().getStatusCode()==200){
            String html = EntityUtils.toString(response.getEntity(), "UTF-8");
            System.out.println("请求成功,数据的长度是:"+html.length());
        }
    }
}

设置请求参数

java">package cn.lala.crawler.httpclient.test;

import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

@SuppressWarnings("all")
public class HttpClientRequestConfigTest {
    public static void main(String[] args) {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //不带参数的get请求
        HttpGet httpGet = new HttpGet("https://www.baidu.com/"); //创建连接请求参数
        //构建请求配置信息
        RequestConfig config = RequestConfig.custom().setConnectTimeout(1000)//创建连接的最长时间
                .setConnectionRequestTimeout(500)//从连接池获取连接的最长时间
                .setSocketTimeout(10 * 1000)//设置传输数据的最长时间
                .build();
        //把请求参数设置到httpGet中
        httpGet.setConfig(config);
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpGet);

            if (response.getStatusLine().getStatusCode() == 200) {
                String html = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println("请求成功,数据的长度是:" + html.length());

            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {

            if (response != null) {
                try { //关闭response
                    response.close();
                    //关闭httpClient
                    httpClient.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

        }

    }
}


http://www.niftyadmin.cn/n/5163308.html

相关文章

Elasticsearch语法之Term query不区分大小写

设置关键词是否区分大小写 说明:case_insensitive是term的可选参数,默认为false,表示关键词区分大小写,设置为true表示关键词不区分大小写。该参数在7.10.0开始有效 需求:分别使用关键词"iphone"和"I…

2023NOIP A层联测27-kotori

琴里的飞船中有 n n n 个人,其中有 n − 1 n - 1 n−1 个通道,所以飞船的内部是一个树形结构。每个人从 1 ∼ n 1\sim n 1∼n 编号,编号越小代表这个人的投票经验最丰富。 每个人有一个投票装置,初始都没有启动。现在琴里希望…

hdlbits系列verilog解答(always块nolatch语句)-36

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 假设您正在构建一个电路来处理来自游戏的 PS/2 键盘的扫描码。设定接收到的最后两个字节的扫描码,您需要指示是否按下了键盘上的一个箭头键。这涉及一个相当简单的映射,可以作为包含四个分支的 case 语句(或…

程序员找副业有哪几个方向(纯干货)

前序 关于副业对于我自己的看法一般会先从自身的职业去拓展,毕竟自己所在的行业自己会更清楚有哪些资源去获取,那么首先我们可以先问万能的gpt我们程序员做副业有哪些实用的推荐,看看它怎么说的 外包网站接单? 每次大家提到程序…

PMP证书含金量高在哪里?在国内有什么用?

PMP,是美国PMI为了为项目经理提供的专业认证,已经获得200多个国家和地区的认可,PMI的考试开发流程符合认证行业最佳实践,在项目管理领域算是非常专业的证书了。 当然PMP的含金量上,企业和个人是相辅相成的&#xff0c…

Vite创建React项目,另外一种更加简单的方法

在上一篇blog中一个一个安装依赖dependencies,有没有一步到位的方法呢,有! 参考《React 18 Design Patterns and Best Practices Design, build, and deploy production-ready web applications with React》4th 第一章倒数第二节Vite as a solution有个…

Android MotionLayout

MotionLayout exends ConstraintLayout(动画框架 过渡) View动画 API1 属性动画API11 过渡动画API18 root.width RootViewWidth TransitionManager.beginDelayedTransition(view) 过渡动画 可以改变其大小和流畅性 Fade 可以改变透明度 通过TrasitinManager管理 Go:动态替…

能介绍一下Git的分支管理功能吗?

Git 的分支管理功能是它最强大和受欢迎的特性之一。分支在 Git 中是指开发人员可以在同一个代码仓库中创建的独立工作流。下面是 Git 分支管理的一些关键概念: 主分支(Master/Main Branch):主分支是 Git 仓库的默认分支&#xff…