httpclient入门三

Ouka傅 Ouka傅     2022-09-10     675

关键词:

我们在爬取网页的时候,由于需要不断的访问目标服务器,因此给目标服务器带来了很多的压力。

因此,很多访问量大的服务器都会有保护措施,如果检测到我们的行为,可以会禁止我们的ip访问。

这个时候,我们就需要使用到代理ip来进行访问了。

在HttpCLient中,提供了一个org.apache.http.client.config.RequestConfig这个类,可以通过它的custom()方法,

来取得它的内部类RequestConfig.Builder类来设置请求信息。

实例:

package com.httpclient;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.client.ClientProtocolException;
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;

public class Test03 {

    public static void main(String[] args) {
        
        /**
         * 使用HttpClents的静态方法createDefault()创建一个可关闭的Http客户端
         * 这个client中有很多重载的execute方法,可以用来执行请求
         */
        CloseableHttpClient client= HttpClients.createDefault();
        
        /**
         * 创建一个对指定地址的get请求,
         * 这个请求在执行之后,将会在response中返回一个entity
         * 在org.apache.http.client.methods包中提供了
         * 很多http方法,比如get,post,head之类的
         */
        HttpGet get=new HttpGet("http://www.tuicool.com/");
        
        //定义一个HttpHost对象,里面有链接到目标服务器所需要的信息
        HttpHost proxy=new HttpHost("13.78.125.167",8080);
        
        //定义RequestConfig对象。里面含有一些请求的配置信息
        RequestConfig reqeustConfig=RequestConfig.custom().setProxy(proxy).build();
        
        //吧请求的配置设置到get请求中去
        get.setConfig(reqeustConfig);
        
        //设置请求头信息中的Agent,模拟浏览器
        get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0");
        
        CloseableHttpResponse response=null;
        try {
            /**
             * 使用默认的上下文执行请求
             * 返回request的response
             */
            response=client.execute(get);
            
            //打印出返回的状态栏
            System.out.println(response.getStatusLine());
            
            //从response中获取entity
            HttpEntity entity=response.getEntity();
            
            /**
             * 利用EntityUtils这个工具包中的toString这个静态方法
             * 可以轻松的获取entity中的内容,并且是以String类型返回
             */
            System.out.println(EntityUtils.toString(entity,"UTF-8"));
            
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

 

在实际的开发中,为了避免ip的限制,我们通常需要动态的更换ip来实现爬取。

 

httpclient之入门使用

...应用程序来说,JDK库本身提供的功能还不够丰富和灵活。HttpClient是ApacheJakartaCommon 查看详情

golang入门案例之httpclient请求

发请求,接收接送,并解析packagemainimport( "fmt" "net/http" "io/ioutil" "net/url" "encoding/json" "os")typeStudentstruct{ Namestring Ageint Guakebool Classes[]string Pricefloat32}func(s*Student)ShowStu(){ fmt.Pri 查看详情

微服务~远程调用httpclient入门(代码片段)

🔎这里是【微服务~远程调用】,关注我学习云原生不迷路👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️👀专栏介绍【微服务~远程调用】目前主要更新微服务&#x... 查看详情

大数据入门-三分钟读懂hadoop

最近在收集整理大数据入门文章,各位盆友关注点赞不迷路,每天都要开心鸭!大数据入门系列文章1.大数据入门-大数据是什么1.大数据入门-大数据是什么2.大数据入门-大数据技术概述(一)2.大数据入门-大数据技术概... 查看详情

32shiro框架入门三

1、AuthenticationStrategy实现//在所有Realm验证之前调用AuthenticationInfobeforeAllAttempts(Collection<?extendsRealm>realms,AuthenticationTokentoken)throwsAuthenticationException;//在每个Realm之前调用AuthenticationI 查看详情

[jetsonnano][教程][入门系列][三]搭建tensorflow环境

JetsonNano入门系列第三讲,第二讲特殊原因没有,讲解虚拟网卡TUN的JetsonNano入门系列第三讲,第二讲特殊原因没有,讲解虚拟网卡TUN的 查看详情

go快速入门三(代码片段)

GO快速入门三array&slice(数组&切片)array和其他的数组一样,slice大概就类似于STL中的vector​```packagemainimport"fmt"funcmain()​vara[6]int​fmt.Println(a)​s:=make([]int,6,10)​s&# 查看详情

入门级笔记三

######3.gateway网关##### 1.路由器主要功能是用来做nat的dnat 目的地址转换snat 源地址转换2.网关路由器上和自己处在同一个网段的那个ip3.设定网关systemctlstopNetworkManager.servicevim/etc/sysconfig/network ##全局网关GATEWAY=网关ip650)this.width=65... 查看详情

three.js-(入门三)

前面两节讲得都是在舞台上创建角色,这一节我们就让角色动起来。three.js中一般是用requestAnimationFrame();来做动画,当然也可以用setInterval定时器,这里不建议使用。因为动画的核心就只有这个函数,然后如何做成何种动画,就... 查看详情

三.取消https,直接http访问

1.WEB-INF/deployerConfigContext.xml在<beanclass="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient"/>增加参数p:requireSecure=" 查看详情

jquery快速入门三(代码片段)

事件常用事件click(function().......)#触发或将函数绑定到指定元素的click事件hover(function().....)当鼠标指针悬停在上面时触发。。。。事件blur(function()........)当元素失去焦点时触发blur事件。focus(function()......)当输入框获得焦点时触发fo... 查看详情

浅析httpclient数据推送(代码片段)

一、HttpClient简介HttpClient是Apache下的子项目,很著名的另外两个项目Cactus和HTMLunit都使用了HttpClient。二、HttpClient提供的方法1、实现了所有的HTTP的方法(get、post、put、head等)2、支持自动转向3、支持HTTPS协议4、支持代理服务器等... 查看详情

javascript结构三层——思想快速入门

本文版权归博客园和作者吴双本人所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/,我是博客园蜗牛,我们共同进步。今天讨论的是什么如果你的工作中需要写JavaScript,而你的JavaScript代码又与业务相关。我想无非就... 查看详情

javascript结构三层——思想快速入门

本文版权归博客园和作者吴双本人所有,转载和爬虫请注明原文地址http://www.cnblogs.com/tdws/,我是博客园蜗牛,我们共同进步。今天讨论的是什么如果你的工作中需要写JavaScript,而你的JavaScript代码又与业务相关。我想无非就是一... 查看详情

34shiro框架入门三,角色管理

//首先这里是java代码,就是根据shiro-role.ini配置文件中的信息来得到role与用户信息的对应关系//从而来管理rolepublicclassTestShiroRoleTestextendsTest2{@TestpublicvoidtestHasRole(){login("classpath:shiro-role.ini","zhang","123");//判断拥有角色role1A 查看详情

git小白入门(三)——远程仓库

还不会基本操作的可以翻看上一篇 git小白入门(二)——入门操作____________________________________________________五:远程仓库。   在了解之前,先注册github账号,由于你的本地Git仓库和github仓库之间的传输是通过SSH加密的... 查看详情

jax-rs入门三:细节

一、若希望一个Java类能够处理REST请求,则这个类必须至少添加一个@Path("/")的annotation;对于方法,这个annotation是可选的,如果不添加,则继承类的定义。 二、一个方法上只有添加了某个HttpMethod的annotation,例如@GET,才有资... 查看详情

activemq入门系列三:发布/订阅模式(代码片段)

在上一篇《ActiveMQ入门系列二:入门代码实例(点对点模式)》中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub&Sub),详细介绍了点对点模式并用代码实例进行说明,今天就介绍下发布/订阅模式。一、... 查看详情